Hi, you'll need to use at least the following plugins:
- Types: allows you to manage custom fields for posts and Users
- Views: allows you to display filtered lists of posts based on custom fields, as well as custom login forms
- CRED: allows you to create custom front-end User registration and edit User forms
- Access: allows you to restrict access to specific content based on User role or post group
The most effective way to manage access to specific posts or pages is to use post groups or User roles:
https://toolset.com/documentation/user-guides/limiting-read-access-specific-content/
However, assigning a User into a post group requires access to wp-admin. That means your Users could select specific post groups in their registration form, but the site Admin would have to manually add each User to those post groups in the backend. User roles are also useful for restricting access, but a User can only belong to one role so this doesn't really apply to your case - you would need to create a role for each possible combination of classes.
There are other ways to accomplish restrictions by using custom fields and conditional HTML: https://toolset.com/documentation/user-guides/conditional-html-output-in-views/
For example, you could use a repeating custom field on each User's profile to store the IDs of each post or page they should be able to access. This field can be managed with CRED, so your Users would be able to select classes or groups during registration. Then in your site's content you can use conditional HTML that tests the values of that repeating field for the current User, and if the current page or post's ID matches any of those repeating field values, then you can display the page content. If not, you can show a message that the User does not have access to this content.
NOTE: We would also like for an Admin to be able to assign and remove groups from or to users. And setup new or remove existing users.
Typically in WordPress terminology an Admin has full access to the back-end of the site and would be able to manage all aspects of Users there, including role and custom field values. If you do not want to allow this User access to the wp-admin dashboard, then a different role would be required. The User could use CRED forms to add or edit existing Users from the front-end of the site. However deleting Users is not currently possible from CRED on the front-end of the site. You could create an "inactive" User role and assign the User to this role instead, using CRED.
On the landing page, you will loop over each of the repeating field IDs for the current User and display links to each related class using Types shortcodes. More information about repeating fields here:
https://toolset.com/documentation/user-guides/repeating-fields/
This is just a general overview, and it's not really possible for me to go into all the details in one ticket. You'll probably have specific questions about each step in this process, so I encourage you to create new tickets for each question. Our support policy is to handle one issue per ticket, so thanks for your cooperation.
If you have not already done so, I also encourage you to visit the "Getting Started" links in our Documentation: https://toolset.com/documentation/
The membership site guide also has some pertinent information, though I don't think you'll be charging for membership so the WooCommerce content can be disregarded:
https://toolset.com/learn/create-membership-site-wordpress-using-toolset-plugins/
Good luck, and feel free to create as many tickets as you feel are necessary to get the information you need.