At the end of your tutorial for using WooCommerce Subscriptions and Access together:
https://toolset.com/learn/create-membership-site-wordpress-using-toolset-plugins/
you state the following:
"After filling in all the WooCommerce fields on the checkout page a new user account will be created with the Customer role (a WooCommerce role). Once the customer order is marked as completed, the user role will automatically change to the role you had chosen in the Subscriber Default Role."
However, at least using the current WooCommerce 3.4.3 and WooCommerce Subscriptions 2.3.2 plugins, this isn't the case. The Customer role is indeed applied upon order completion, but Subscriptions doesn't replace Customer with the Subscriber Default Role; rather, it adds it, so that the account will have both roles.
Various existing threads, including these:
https://toolset.com/forums/topic/membership-access-allowing-multiple-roles-memberships-per-user/
https://toolset.com/forums/topic/multiple-roles/
https://toolset.com/forums/topic/multiple-access-roles/
https://toolset.com/forums/topic/need-to-assign-2-roles-to-users-and-limit-access/
have noted that the Access plugin does not properly handle multiple roles per user. That indeed appears to be true, as could be seen when I set up a membership site using a custom role created by Access as the Subscriber Default Role for the Subscriptions plugin. The custom role ("Member") conferred read access rights to a custom post type ("Member Page"). This worked as intended when I manually changed an account's default "Subscriber" role to "Member" and back. However, when Subscriptions adds "Member" in addition to the "Customer" role supplied by WooCommerce core, the account in question does *not* have read access to the CPT. Using the "Multiple Roles" plugin to create this situation manually, I can reproduce the effect. If "Member" is the only role, it works fine; if "Customer" is also present, it does not.
While I haven't looked at the Access code to verify this, the behavior observed suggests that a logical AND of the Access read permission settings for each role is performed, rather than the expected OR. Based on this assumption, I found a workaround for this particular situation: I enabled the Access read permission to the CPT for the "Customer" role as well, and then configured Subscriptions to use the default "Subscriber" role as the Inactive Subscriber Role. ANDing Member and Customer roles then permits read access to "Member Pages", but an expired subscription with Customer and Subscriber roles is denied access, as intended. Please let me know if I'm making an invalid assumption about how Access works and am likely run into unexpected trouble with this approach.
This workaround is awkward and certainly doesn't scale well to more complicated situations. Shouldn't Access use a logical OR for its access bits, so that roles can independently confer specific access? I would certainly urge you to consider this change, especially given how WooCommerce Subscriptions operates.
In any case, the tutorial referenced above should be updated to address this issue.