Access precedence
The order in which checks are applied, and what that order means in practice.
The sequence
For a course
1. Login required? → signed out → BLOCKED
2. Course permission rule → the rule decides → STOP
3. Paid course? → purchase decides → STOP
4. Otherwise → OPEN
For a lesson
0. Attached course? → none → does not resolve
1. Login required? → signed out → BLOCKED
2. Lesson permission rule → the rule decides → STOP
3. Course permission rule → the rule decides → STOP
4. Otherwise → the course's access decides
Plus: a preview lesson is readable regardless, unless the course requires login for previews.
Rules stop the chain
Once a permission rule applies, the evaluation stops there. Whatever comes after it is not consulted.
Two consequences that surprise people:
A rule on the course means the paid toggle does nothing. If you set both, the rule decides. To use the purchase check, do not set a rule.
A rule on a lesson means the course's rule does nothing for that lesson. So a lesson rule can be less restrictive than the course's, and it will open the lesson to students who cannot open the course.
The login requirement is different
It is checked first and it only ever removes access. Nothing later in the chain can let a signed-out visitor through — except a preview lesson, which is a separate path.
That makes it the one setting you can add to any course without re-testing everything else, as long as you also give signed-out visitors a way to sign in.
Previews sit outside the chain
A preview lesson is not evaluated against the course's rules at all. The only thing that constrains it is the course's Preview lessons also require login.
That is why previews must be audited visually: nothing in the course's access configuration tells you which lessons are open.
Practical combinations
| Course setting | Lesson setting | Result |
|---|---|---|
| Rule A | — | Rule A decides |
| Rule A | Rule B | Rule B decides for that lesson |
| Rule A | Preview | Anyone reads that lesson |
| Paid | — | Purchase decides |
| Paid | Rule B | Rule B decides for that lesson; the purchase is not checked |
| Paid + Rule A | — | Rule A decides; the paid setting is ignored |
| Login + Rule A | — | Signed in and matching Rule A |
| Login + Preview | Preview | Preview readable, unless preview-login is on |
The two bold rows are the ones that cause misconfigured courses.
Designing around it
- One model per course. Decide login, rule or paid, and use that.
- Overrides are exceptions. If several lessons override, the course's model is wrong.
- Never rely on two mechanisms to combine. They do not add up; the first one that applies wins.
- Remember that a rule has a single requirement type. It can list several roles or several products, and a purchase or subscription rule can add a date condition — but a role test and a purchase test cannot share one rule. One course, one requirement.
Verify precedence on your own course
- Set a course rule and a paid toggle together.
- Sign in as a student who satisfies the rule but has not bought.
- Confirm they get in — proving the rule replaced the purchase check.
- Remove the rule and confirm the same student is now blocked.
- Decide which behavior you actually want, and configure only that.