2.0 KiB
2.0 KiB
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.PermissionMatrixist die einzige Quelle der Matrix: jePermissionund Rolle eineAccessLevel(None,Restricted,Full). Konfigurierbare Ausnahmen kommen alsPermissionOptionsaus den Familieneinstellungen.- Die Api registriert je
Permissioneine PolicyPermission:<Name>(Policies.For(permission)). EinPermissionHandlerwertet die Matrix mit den aktuellen Einstellungen aus (gecacht überISettingsProvider, beim Speichern invalidiert). Endpunkte nutzen.RequirePermission(Permission.X). Restrictedheiß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 (Claimsfp:permission, dieselben Policy-Namen). - Die rollenbasierten Policies
Admin,Parent,FamilyMember,AnyRolebleiben 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).