How to configure access for creating a custom LMS? I am looking to create a LMS either in an existing Drupal install.

Anonymous users can browse course information and also preview certain Modules &amp; Slides (see below). They will be able to buy access to a Course and then view the all the Course content. There will be a multiple different Courses, each need to be purchased separately at different prices.

Course hierarchy:


Course > Module(s) > Topic(s) > Slide(s)  
Course is what the user will pay for access  
Modules and Topics are the only for categorisation and may only have a Small description  
Preview content will be by only a select few Modules per Course - being able to see the slides within chosen module  
Slides are where the learning content is - mostly videos and PDFs   
Slides may also be a Quiz


Once purchased, the display of the course content will be with the full course hierarchy in a sidebar so the user can navigate through the course and view the content of each slide in the main content panel by selecting the Slide.

Question: There are a few choices out there, however I have seen posts about Organic groups. Is this the best way to categorise the Course Content, or should I use Taxonomy? (As the how user view the course information will be with the full Course hierarchy in a side bar and selecting Slides will show the Slide content in the main section)

I am very familiar with Drupal basics, but I would like to know how to restrict user access to only their own purchased content?

What would be your solution to set this up?
I recommend you have a look at the Group module, which may be considered as a possible alternative to the Organic Groups module, and which you seem to be familiar with already.

Have a look at my answer to "What are the features of the Group module versus Organic Group module?" for details about:


How both modules compare to each other.
Integration with various modules that you might want to take advantage of also.


Resources


Community documentation for the Group module.
Video tutorial "How to use the Group module in Drupal 8 to manage editorial access control to different areas of a web site".
Podcast "Using the Group module as an Alternative to Organic Groups in Drupal 7 and 8".


Sample configuration

Below is an example of a possible configuration, which may help to get you started with possible configurations (using the Group module):

Group type ID ! Group type ! Group role ID ! Role
--------------+------------+---------------+------------
 1            ! Class      ! 3             ! Instructor
 1            ! Class      ! 4             ! Student
 2            ! Customers  ! 5             ! Lead
 2            ! Customers  ! 6             ! Prospect
 2            ! Customers  ! 7             ! Licensed Customer
 2            ! Customers  ! 8             ! Sales
 2            ! Customers  ! 9             ! Support
 2            ! Customers  ! 10            ! Accounting
 2            ! Customers  ! 11            ! R&amp;D
 3            ! Project    ! 12            ! Project Manager
 3            ! Project    ! 13            ! Developer
 3            ! Project    ! 14            ! Customer 


Group Types

The above example consists of 3 group types:


Class.
Customers.
Project.


Group Roles

For each of the 3 group types, there are specific Roles defined, some more details about some of them:


for the Class group, these are the 2 roles that are configured:


Instructor.
Student.

for the Project group, these are the 3 roles that are configured:


Project Manager.
Developer.
Customer.



These are the Group Specific Roles: these roles can be configured per group type and will only be available on groups of that group type. As an example, for group type "Class", the defined roles are Instructor and Student (which are not available for the other group types.

On top of the group specific roles, there are also Special Global Roles: These are the special (hardcoded) roles named Outsider (= a signed in user that did not join a group) and Member  (= a signed in user that did join a group). These cannot be defined by the Drupal administrator, and they are always available for any group. These roles can have different permissions sets for each group type. Special case: the role Anonymous is related to a user that is not signed.

Groups

Each of the configured group types can have any number of Groups.

Examples of groups:


for the Class group type, there could be these Groups:


Getting started with Drupal.
Drupal for site builders.
Become an expert in using the Rules module.

for the Customers group type, there could be these Groups:


Service Requests.
Order Processing.
Sales Orders.
Relationship Management.



Permissions

For each of the configured group types, you can then also configure for each Content Type which Role has what kind of access (= none, view, create, edit, delete). Be aware: even though this looks similar to Drupal's permission configuration, these permissions are not the same permissions (they are specific to the Group module).

PS: this answer applies to either D7 or D8.