Administration

Users & roles

Cerynix enforces role-based access control on every request, server-side — the UI hides actions you cannot perform, but the backend is the actual gate. There are five fixed system roles per organization (no custom roles yet). This page is the full permission matrix; for the click-by-click invite flow during initial setup, see the install guide's user step.

The five roles

Role keyNameDescription
adminOrganization AdministratorFull access to the organization, members, settings and all modules. The only role with org:manage, members:manage, settings:manage, webhook:manage and token:manage.
security_managerSecurity Manager / CISOOwns the compliance programme: controls, evidence, risk, nonconformities/CAPA, management review, tasks, suppliers, incidents, connectors, reports. Cannot manage members or organization settings.
it_managerIT Infrastructure ManagerExecutes remediation: assesses controls, writes evidence, owns assets/exposure and tasks, manages connectors. Narrower than Security Manager — no approvals, no management review, no report generation.
auditorAuditor / ConsultantRead-only across every module, plus audit-log visibility, report generation and AI assistant use. Cannot write, approve, or manage anything.
executiveBoard / ExecutiveOversight: dashboards, reports, control approval, risk acceptance and nonconformity residual-risk acceptance — deliberately the only non-admin role with acceptance authority.
Source of truth This table (and the matrix below) is transcribed from apps/api/app/services/rbac.py — the single source of truth the backend actually enforces, not a separately-maintained description that can drift from the code.

Full permission matrix

admin holds every permission below (omitted from its own column for brevity — assume ✓ everywhere). A blank cell means that role does not have the permission; the UI hides the corresponding action for that role, and the API rejects it (403) even if called directly.

PermissionSecurity ManagerIT ManagerAuditorExecutive
Organization & members
org:read✓✓✓✓
org:manage————
members:read✓—✓—
members:manage————
settings:manage————
Onboarding
onboarding:manage✓———
Controls
control:read✓✓✓✓
control:assess✓✓——
control:manage✓———
control:approve✓——✓
Evidence
evidence:read✓✓✓—
evidence:write✓✓——
evidence:delete✓———
evidence:approve✓———
Risks
risk:read✓✓✓✓
risk:write✓———
risk:accept✓——✓
Tasks
task:read✓✓✓—
task:write✓✓——
task:delete✓———
Assets & exposure
asset:read✓✓✓✓
asset:write✓✓——
finding:read✓✓✓✓
finding:write✓✓——
finding:delete✓———
Nonconformities & CAPA (ISO 27001 Clause 10.1)
nonconformity:read✓✓✓✓
nonconformity:write✓✓——
nonconformity:approve✓———
nonconformity:risk_accept✓——✓
Management review (ISO 27001 Clause 9.3)
management_review:read✓—✓✓
management_review:write✓———
Connectors
connector:read✓✓✓—
connector:manage✓✓——
connector:delete✓———
Suppliers & incidents
supplier:read✓✓✓✓
supplier:write✓———
incident:read✓✓✓✓
incident:write✓✓——
AI assistant (AURA)
ai:use✓✓✓✓
ai:manage✓———
Webhooks & API tokens
webhook:manage————
token:manage————
Dashboards & reports
dashboard:read✓✓✓✓
report:read✓✓✓✓
report:generate✓—✓✓
Audit
audit:read✓—✓—
Immutable audit snapshots (Audit Room)
audit_snapshot:read✓—✓—
audit_snapshot:create✓———
Deliberate separations A few gaps in the matrix are intentional, not oversights: it_manager can raise a nonconformity but not approve its effectiveness review or accept residual risk on it (segregation of duties — the role that executes remediation does not also sign off on it); auditor can read a sealed audit snapshot but not create one (an auditor verifies the record, they do not produce the thing they audit); only admin can manage webhooks or API tokens (both are organization-wide automation surfaces, treated the same as member/settings management).

Inviting & managing members

Go to Settings → Members (/settings), or POST /orgs/current/members directly. Only admin can manage members (a Security Manager can read the list but not change it).

  1. Click Invite member and enter the email, full name, role and a temporary password (minimum 10 characters, enforced server-side).
  2. A new email creates a user account, consuming a licensed seat (checked against the edition's max_users limit — see the license activation step). An existing email on the instance is added to this organization instead; a duplicate membership is rejected.
  3. Communicate the temporary password over a secure channel; have each user change it and enrol MFA on first login.
Expected result
Each invited user appears in the Members table with their role; a
member.invited audit event is recorded.

Guardrails

  • The system refuses to demote the last remaining admin — every organization keeps at least one.
  • You cannot remove your own membership, and you cannot remove the last admin (even as that admin).
  • Every member and role change is audited (visible under Auditability).
  • Access is enforced server-side on every request from the matrix above — the console only hides actions you cannot perform; it does not gate them.

Enterprise SSO, MFA & SCIM

Configured under Settings → Security & SSO (all roles keep the same five system roles; SSO/SCIM control how accounts are provisioned, not what a role can do):

  • TOTP multi-factor authentication with backup codes — available to every user regardless of edition.
  • SAML SSO (including optional signed AuthnRequests), OpenID Connect and LDAP/Active Directory sign-in — require the Enterprise edition.
  • SCIM 2.0 provisioning — a copyable tenant base URL and least-privilege API-token auth to wire Azure AD, Okta or OneLogin; Users and Groups support equality filters, pagination and full lifecycle sync. SCIM resources return ETags; IdPs can send If-Match for safe updates and If-None-Match for cache revalidation. Requires Enterprise.
  • Audit-ledger integrity verification — recomputes the hash chain on demand (see Auditability).