If you've a custom usergroup under Registered and the user logs in with an expired subscription while free subscriptions are not allowed it will not block their login. It will if they are assigned to Registered usergroup though. Example structure as follows.
Public - Registered - - Custom
Registered works for this functionality while Custom does not.
It all happens in cbpaidsubscriptions::onDuringLogin() at begin calling $paidsubsManager->checkExpireMe() that calls checkUserSubscriptions().
If a user belongs to other groups that are not managed by CBSubs in a plan that is accessible to the user, then the user will be blocked (see below), but not presented with possible upgrade plans (that is a bug) because (in cbpaidUserExtension::checkUserSubscriptions() line 296):
if((!self::_allValuesOfArrayInArray((array)$user->gids,$oldPotentialPlansGids))||in_array($_CB_framework->acl->mapGroupNamesToValues('Superadministrator'),(array)$user->gids)){// Do not block a user that has a gid in his gids that is not controlled by a plan that was accessible to him after downgrade:// This avoids blocking e.g. super admins if there is no super-admin plan.// But also if there is a Super-admin plan by configuration error, it still should not get blocked:$block=0;}
If a user does not belong to any group managed by CBSubs, it won't be blocked because in cbpaidUserExtension::checkUserSubscriptions() calling cbpaidUserExtension::_adjustUserAclBlock() checks:
to block anything. But if "Registered" is not in the gids of the user, he will not get blocked there (and then of course with the issue above, not be presented with upgrade plans possibilites, which is expected in this case.