2.6 KiB
ADR-0010: Benutzerlebenszyklus – Deaktivieren, Ablauf, Löschen, PIN-Login
- Status: akzeptiert
- Datum: 2026-10-09
Entscheidung
Anmelden verweigern: AppSignInManager.CanSignInAsync lehnt deaktivierte, gelöschte und abgelaufene Konten ab
(AppUser.CanSignIn). Der Login-Endpunkt meldet „deaktiviert oder abgelaufen“ (403) nur bei korrektem Passwort, sonst die
allgemeine Fehlermeldung (401) – der Kontostatus wird nicht ohne Passwort preisgegeben.
Laufende Sitzungen: Bei sicherheitsrelevanten Änderungen (Rolle, aktiv/inaktiv, Ablaufdatum, Löschen, Passwort-Reset) wird der
Security Stamp erneuert; das Cookie wird spätestens nach 5 Minuten ungültig. Zusätzlich steht das Ablaufdatum eines Gastzugangs als
Claim fp:expires_at im Cookie und wird von der Fallback-Policy bei jedem Request geprüft – ein Gast verliert den Zugriff also
exakt zum Ablaufzeitpunkt, ohne Datenbankabfrage.
Löschen = Soft Delete mit Anonymisierung: AppUser implementiert ISoftDeletable (globaler Query-Filter, auch für Identity).
Beim Löschen bleiben Id und Anzeigename (für Verlauf, Audit, spätere Zuordnungen), Benutzername wird zu geloescht-<id>
(der Name ist danach wieder frei), E-Mail, Passwort-Hash, PIN und Profilbild werden entfernt.
Letzter Admin: AdminGuard.WouldRemoveLastActiveAdmin verhindert, dass der letzte aktive (nicht abgelaufene, nicht gelöschte)
Administrator gelöscht, deaktiviert, mit Ablaufdatum versehen oder herabgestuft wird (409 Conflict).
Eine Rolle je Benutzer: Die Admin-Oberfläche vergibt genau eine der vier Rollen; ein Rollenwechsel ersetzt die bisherige.
Passwort-Reset durch Admin: Neues vorläufiges Passwort (über Reset-Token, damit Passwortregeln greifen), MustChangePassword = true,
Kontosperre wird aufgehoben.
PIN-Login (vorbereitet): Admins können für Kinder eine 4–6-stellige PIN setzen (gehasht wie Passwörter). POST /api/auth/pin-login
existiert, ist aber nur aktiv, wenn Features:PinLogin=true gesetzt ist (Standard: aus → 404). Fehlversuche zählen zur normalen
Kontosperre. Die Tablet-Oberfläche (Profilauswahl + Ziffernblock) folgt mit dem Wand-Tablet-Modus (Backlog).
Audit-Log: Alle administrativen Aktionen schreiben einen Eintrag (AuditLog-Tabelle) mit Anzeigename des Handelnden, Aktion,
Ziel und Änderungsdetails (alt → neu, keine Passwörter). Ansicht mit Paging im Adminbereich.
Konsequenzen
Gelöschte Benutzer bleiben als Datensatz erhalten (Verweise in Aufgaben/Terminen/Chat bleiben gültig). Eine endgültige Löschung (DSGVO-Auskunft/Löschung) kann später als eigener Admin-Vorgang ergänzt werden.