Zum Inhalt springen

Rollen & Capabilities

Diese Seite beschreibt das Rollen- und Berechtigungsmodell auf technischer Ebene. Sie richtet sich an Entwickler. Die nutzerorientierte Variante steht unter Rollen & Berechtigungen.

KanzleiSynchron unterscheidet zwei Achsen (backend/api/src/auth.rs):

  • Mandanten-Rollen — Nutzer eines Mandanten. Sichtbar im Einladungsformular unter /settings/team.
  • Interne Ops-Rollen — KS-internes Personal. Zugriff nur über /ops/**, keine Mandanten-Nutzer.

Beim Einladen unter /settings/team stehen genau diese drei Rollen zur Auswahl (frontend/src/app/(app)/settings/team/page.tsx):

Rollen-SchlüsselAnzeigenameDarf
reviewerSachbearbeiter / MitarbeiterTägliche Arbeit: Importe, Abstimmung, Ausnahmen. Kein Team-Management, keine Einstellungsänderung.
merchant_adminKanzlei-AdminTeam einladen/sperren, Mandanteneinstellungen ändern, Löschung (Erasure) auslösen. Eigentümer eines Mandanten.
internal_opsInterner OperatorMandantenübergreifende Sichtbarkeit. Wird zur Einladungszeit von einem merchant_admin vergeben.

Das Frontend gated Admin-Oberflächen über frontend/src/lib/role-capabilities.ts statt über harte Rollen-Vergleiche:

HelferErlaubt für
canViewAdmin(r)super_admin, support, compliance_officer, read_only, merchant_admin
canMutateTenant(r)super_admin, merchant_admin
canManageTeam(r)super_admin, merchant_admin
canRunErasure(r)super_admin, compliance_officer, merchant_admin

Zusätzlich liefert /me ein capabilities: string[]-Array. Ops-Nutzer haben role: null und ein separates ops_role, weshalb rollenbasierte Gates für sie fail-closed sind; verwende daher hasCapability(caps, cap) mit den Konstanten aus OPS_CAPS / TENANT_CAPS.

Vier abgestufte interne Rollen ersetzen das frühere breite internal_ops (backend/api/src/auth.rs, Sprint 10 §13.2). merchant_admin bleibt als Migrationspfad in allen Ops-Gates zugelassen.

RolleMandantenDPR / ErasureIssuesMutieren?
super_adminjajajaja
supportlesenneinjaIssues
compliance_officerlesenjalesenDPR
read_onlylesenlesenlesennein

Die Backend-Gates dazu:

  • require_super_adminsuper_admin (plus merchant_admin für Kompatibilität).
  • require_supportsuper_admin oder support.
  • require_compliancesuper_admin oder compliance_officer (DPR-Akten, DSGVO-Art.-17-Löschung).
  • require_read_only_ok — alle Ops-Rollen dürfen lesende GETs; read_only scheitert an den mutierenden Gates.

OPS_ROLES umfasst super_admin, support, compliance_officer, read_only und das aus Kompatibilitätsgründen geführte internal_ops.

Der Periodenabschluss erfordert, dass eine andere Person abschließt als die, die die Periode angelegt hat. Daraus folgt: Ein Mandant braucht mindestens zwei Nutzer mit Zugriff, sonst lässt sich der Abschluss nicht durchführen. Mehr dazu unter Rollen & Berechtigungen.