I want to create a website with few courses in it. Each course will have a node of content type Course. I want users to be able to enter the course.

So this is sort of a "many-to-many" relationship question for Drupal, as for each subscription I will need to keep details on the progress, e.g. "last completed lesson", "total score", etc.

Is there a module that will have Enrollment/Subscription as a separate Entity/Content or Relation module will do it?

What is the best approach?


  • This should allow to show all students subscribed to a course on a course page;
  • Show all current subscriptions with their details (fields) to student on my_courses page.

UPDATE 2: Can I use Open Group module for that?

  • I think drupal.org/project/entityreference will do what you're wanting.
    – Cthos
    Commented Feb 6, 2013 at 21:50
  • @Cthos can I add fields to subscriptions via entity reference? It looks like Relation might be a more suitable solution...
    – Bulat
    Commented Feb 6, 2013 at 22:24
  • Sure, you'd make a content type of "Progress" which would be owned by a user, which is then referenced by the course. You'd use views/blocks to show that information on a course dashboard page, and so on. Though, the Relation page itself says "While a similar module could be built based on Entityreference and Entity Construction Kit (ECK) by creating a custom entity and adding entity reference fields to it [...]" - That implies that both of the modules could do what you're proposing.
    – Cthos
    Commented Feb 6, 2013 at 22:56
  • Sounds good, I will test both methods tomorrow. Thanks. I actually did not think of author as a reference field.
    – Bulat
    Commented Feb 6, 2013 at 23:01
  • One other module that I did not consider yet, is OG. Can it be used for that? I think I will have to use it anyway for other purposes, so if OG Membership is configurable, it might do the trick.
    – Bulat
    Commented Feb 7, 2013 at 18:46

3 Answers 3


It seems that this can be done with Entity Registration module.


You could build it yourself, or why not go for a free ride? The OpenAcademy distribution looks like it is preconfigured with the kind of things that you would need.

  • I guess I will have a look at OpenAcademy's implementation, but this is sort of theoretical question on finding the optimal way to implement the subscription. Enrollment is just an example.
    – Bulat
    Commented Feb 7, 2013 at 20:44
  • I had a look at openacademy's source, and it has all modules one can imagine. I could not figure out which module(s) they used to implement enrollment process.
    – Bulat
    Commented Feb 11, 2013 at 14:29

You might want to give it a try to use the Group module, which allows for creating arbitrary collections of your content and users on your site, and grant access control permissions on those collections.

It is available as of D7, and has a D8 version also. It creates groups as entities, making them fully fieldable, extensible and exportable. Every group can have users, roles and permissions attached to it (refer to "What are the various roles supported by the Group module?" for more details about that).

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&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.


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.


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).

Comparison with the Organic groups module

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 (Group versus Organic groups) compare to each other.
  • Integration with various modules that you might want to take advantage of also.


PS: this answer applies to either D7 or D8.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.