My answer would be for Drupal 7 with respect to current code to your final question of functionality:
- After making sure both the rest of your structure is in place, Add the Rules watchdog that will "listen" for the role or lack thereof
and then do not only 'it' but perhaps other things for example display a popup message. It would be possible to change the look or color of the button as well. Requirement: Rules module. Rules UI will have it write the code for you, that you can then save to code if you want.
- With a rule stating normal code behavior not having fired or reverting to normal behavior after logging in, then the button will do as it was coded to do.
Subscriptions with an end date in Drupal by marrying a subscription to a role by https://www.drupal.org/project/commerce_license not released for 8 production yet whereby you do all the magic of billing: Commerce Billing is an option in Drupal 7, method, cycle, grace period, and expire or downgrade the role as you wish upon expiration. From a step point-of-view, this step precedes the rules, as this will be the basis for rules. "commerce_billing" is only available for Drupal 7 at this time with respect to billing anyway, and the projects don't show a Drupal 8 version being started yet. That's why my answer is for Drupal 7 only at this time, except when one module may be ready but calls itself "dev", and the other is not yet started.