Pay-Per-Node Functionality
We're doing something similar.


The User gets a role, that determines what he may buy
A custom field on the productVariation lists which roles it is available for
In a preprocess function we compare the user's roles to the accepted roles on the variation and set a flag
twig evaluates that flag


Since we only have 5 products, where we have to differentiate, this works. I imagine if you had hundreds, it might be cumbersome.