Appearance
RBAC matrix
Source of truth in code: packages/domain/src/rbac.ts.
Roles
tenant_owner, admin, duty_lead, office, staff, viewer, platform_operator
Permissions by role
| Permission | Owner | Admin | Duty lead | Office | Staff | Viewer | Platform operator |
|---|---|---|---|---|---|---|---|
config.manage | ✓ | ✓ | ✓ | ||||
staff.import | ✓ | ✓ | ✓ | ||||
rota.publish | ✓ | ✓ | ✓ | ✓ | |||
rota.request_change | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
absence.create | ✓ | ✓ | ✓ | ✓ | ✓ | ||
override.last_resort | ✓ | ✓ | ✓ | ✓ | |||
notify.configure | ✓ | ✓ | ✓ | ||||
analytics.view | ✓ | ✓ | ✓ | ✓ | ✓ | ||
export.create | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |
user.invite | ✓ | ✓ | ✓ | ||||
ai.use | ✓ | ✓ | ✓ | ✓ | |||
sso.configure | ✓ | ✓ | |||||
scim.configure | ✓ | ✓ | |||||
integrations.outlook.configure | ✓ | ✓ | ✓ | ||||
audit.view | ✓ | ✓ | ✓ | ||||
help.request.create | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
integrations.outlook.configure also covers Microsoft profile photos (same Entra admin setup).
School-wide Today and Timetable boards (and rota.today / week summary) are for every role except staff. Staff use My schedule only.
Missed work uses existing permissions: any linked staff member can log and undo their own items. Confirming suggestions and logging for someone else uses rota.publish or absence.create. School-wide lists and CSV use analytics.view.
Invite UI roles
The Admin invite form offers: Admin, Duty lead, Office, Staff, Viewer. Tenant owner is created at provisioning time.

