From MoodleDocs

A context is a space in Moodle where roles can be assigned. For example, a Moodle site is one context and that contains a number of other contexts within it. A category is a context, within a site context, that contains courses and sub-categories that have a context of their own.

A course may hold, within its own context, an activity, or a Question bank's question category, which are also contexts. A context might contain other contexts and Roles can be assigned to each context.

There is a hierarchy of contexts which helps locate and define a specific space. A course can have many contexts in its space. These might include lesson, assignment, forum and quiz modules and blocks.

Generally speaking, this hierarchy allows a lower context to receive information from a higher context. Thus a student in the context of Course A, will initially be considered a student in a Quiz context that is located in Course A. Or when a theme has been set for the Biology course categories, that is passed on to Biology 101.

Roles and contexts

A context is combined with role permissions to define a User's capabilities on any page in Moodle. Typically contexts have their own organization structure which allow a User's role to be passed along to the context "below" but not to the one above it.

Each context can have a different role assigned to a User

It is possible to assign a user different permissions based upon a specific context. For example, a user might be given the role of "student" for a course but be given a teacher's role in the context of one specific forum. Or a user can be a teacher of one course and a student in another course.

Many Moodle contexts have a place to grant exceptions to specific roles within that context. Those exceptions are non-transferable from that context. That is, an exception can be applied to the next context downward, but cannot applied sideways nor upward from that context.

Graphic showing contexts within contexts

The image below shows a few contexts and their relationships. The "System" or Moodle site is the overall context. The user is defined initially in this context.

  • The System context has 2 contexts under it, with other context under them
    • The Front page context has
      • An activity module context and
      • A block context within it
    • The Course Category context has
      • A Course context within it. The course context has
        • An activity module context and
        • A block context within it


(Source: Development:Roles#Context)

Another graphic of hierarchy

Showing the Site > Category > Course contexts but not activities

Context Level constants

The constants for the context levels are described in moodle/lib/accesslib.php:

  • _USER = 30;
  • _COURSECAT = 40;
  • _COURSE = 50;
  • _MODULE = 70;
  • _BLOCK = 80;

See also