Authorization

Permission matrix

This table is generated directly from the code that enforces access. Every entry is checked on the server for page loads, API calls, and individual record access - hiding a navigation link is never the control.

Two checks, always

A request passes only if the role holds the permission and the specific record is in the caller’s scope (same organization, and either their own record or one an elevated permission covers). Denied requests are written to the audit log.

Learning content

Published content is immutable. Editing creates a draft; only an Admin can publish a new version.

PermissionADMINSCHEDULEREMPLOYEE
content.view.published✓✓✓
content.view.drafts✓✓—
content.create✓——
content.edit.any✓——
content.edit.delegated—✓—
content.submit_for_approval✓✓—
content.publish✓——
content.archive✓——
content.assign✓——

Scheduling

The Scheduler's core remit: dates, ordering, and the minimum roster needed to do it.

PermissionADMINSCHEDULEREMPLOYEE
calendar.view✓✓—
calendar.schedule✓✓—
calendar.adjust_due_dates✓✓—

Roster

Name, location, and team only.

PermissionADMINSCHEDULEREMPLOYEE
roster.view_minimal✓✓—

Learner experience

PermissionADMINSCHEDULEREMPLOYEE
learning.view_assigned✓—✓
learning.complete✓—✓

Practice

PermissionADMINSCHEDULEREMPLOYEE
practice.run✓—✓

Progress

PermissionADMINSCHEDULEREMPLOYEE
progress.view_own✓—✓

Assessment

Employees see their own feedback and may request a human review. Corrections require a recorded reason.

PermissionADMINSCHEDULEREMPLOYEE
assessment.view_own✓—✓
assessment.request_review——✓
assessment.review✓——
assessment.correct✓——

Performance data

Deliberately unavailable to the Scheduler role, including through direct API calls.

PermissionADMINSCHEDULEREMPLOYEE
metrics.view_org✓——
metrics.view_individual✓——

Transcripts

Private recordings and transcripts.

PermissionADMINSCHEDULEREMPLOYEE
transcripts.view_any✓——

Workplace outcomes

PermissionADMINSCHEDULEREMPLOYEE
outcomes.manage✓——

Knowledge base

PermissionADMINSCHEDULEREMPLOYEE
knowledge.search✓—✓
knowledge.manage✓——
knowledge.approve✓——

Communication

The Scheduler role has no communication permission of any kind. Automatic assignment notices are transactional system notices, not messages, and cannot be customised.

PermissionADMINSCHEDULEREMPLOYEE
comms.announce✓——
comms.send_message✓——
comms.reply✓—✓
comms.post_question✓—✓
comms.moderate✓——

Administration

PermissionADMINSCHEDULEREMPLOYEE
users.manage✓——
PermissionADMINSCHEDULEREMPLOYEE
roles.manage✓——
PermissionADMINSCHEDULEREMPLOYEE
org.manage✓——
PermissionADMINSCHEDULEREMPLOYEE
settings.manage✓——
PermissionADMINSCHEDULEREMPLOYEE
audit.view✓——

Additional rules not expressible as a grid

  • No user may change their own role, including an Admin. A second administrator must make the change, and it is written to the audit log.
  • A Scheduler’s content.edit.delegated grant is per-module and per-field. Fields outside the delegation are rejected even when included in a crafted request body.
  • Answer keys, question explanations, scoring rubrics, skill tags, approved brand guidance, permissions, and platform settings are never delegatable.
  • A Scheduler may schedule only for employees at their own location, and sees only name, location, and team.
  • Employees can reach only their own attempts, practice sessions, transcripts, and assessments. Another employee’s record id returns 403, not an empty result.
  • The demo role selector exists only when the app is running in demo mode. In connected mode the endpoint refuses outright.