Files
Rbm.FamStack/docs/adr/0008-berechtigungsmatrix.md
T
2026-10-09 18:54:02 +02:00

2.0 KiB
Raw Blame History

ADR-0008: Berechtigungen als Rollenmatrix mit Zugriffsstufen

  • Status: akzeptiert
  • Datum: 2026-10-09

Kontext

Die Anforderungen enthalten eine Matrix aus Funktion × Rolle mit Abstufungen wie „nur eigene“, „nur zugewiesene“, „nur Wünsche vorschlagen“ oder „nur wenn freigegeben“. Einige Ausnahmen sind konfigurierbar (Gäste dürfen Einkaufsliste bearbeiten, Gäste im Familienchat). Rein rollenbasierte Policies (RequireRole) bilden das nicht ab und würden sich über Slices verstreuen.

Entscheidung

  • FamilyPlanner.Domain.Authorization.PermissionMatrix ist die einzige Quelle der Matrix: je Permission und Rolle eine AccessLevel (None, Restricted, Full). Konfigurierbare Ausnahmen kommen als PermissionOptions aus den Familieneinstellungen.
  • Die Api registriert je Permission eine Policy Permission:<Name> (Policies.For(permission)). Ein PermissionHandler wertet die Matrix mit den aktuellen Einstellungen aus (gecacht über ISettingsProvider, beim Speichern invalidiert). Endpunkte nutzen .RequirePermission(Permission.X).
  • Restricted heißt: Der Endpunkt ist erreichbar, der Slice muss objektbezogen prüfen (z. B. Kind löscht nur eigene Einträge). Diese Prüfungen entstehen mit den jeweiligen Fach-Slices (Phasen 3–8) und werden dort getestet.
  • Jede Permission-Policy schließt die Fallback-Bedingungen ein (angemeldet, nicht abgelaufen, Passwortwechsel erledigt).
  • Der Client erhält die wirksamen Berechtigungen über GET /api/auth/me (CurrentUserDto.Permissions) und nutzt sie nur zum Ein-/Ausblenden (Claims fp:permission, dieselben Policy-Namen).
  • Die rollenbasierten Policies Admin, Parent, FamilyMember, AnyRole bleiben für grobe Bereiche (z. B. Seite /admin).

Konsequenzen

  • Eine Änderung der Matrix ist eine Zeile im Domain-Projekt; Tests (PermissionMatrixTests, ApiPolicyTests) prüfen jede Zelle.
  • Änderungen an den Gast-Ausnahmen wirken sofort (Cache-Invalidierung im selben Prozess; bei mehreren Api-Instanzen nach max. 1 Minute).