Etappe 5: Verlauf mit Filtern, Wiederholen und Aufräumen; Benutzerverwaltung, Passwort, Audit-Log; OIDC. Refs #014, #015, #016 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
31 lines
1.8 KiB
Markdown
31 lines
1.8 KiB
Markdown
# #015 Rollen, Benutzer, Tokens, Audit-Log
|
||
**Status:** erledigt
|
||
**Meilenstein:** v0.5.0
|
||
**Labels:** feature, sicherheit
|
||
**Geschätzt:** 6 h **Tatsächlich:** 0 h 10 min
|
||
|
||
## Ziel
|
||
Admin/Operator serverseitig erzwungen, jede Aktion protokolliert.
|
||
|
||
## Aufgaben
|
||
- [x] Rechte-Tabelle, strukturelle Prüfung aller Route Handler (Test) – seit #001, jetzt mit den neuen Routen
|
||
- [x] Benutzerverwaltung (anlegen, Rolle, sperren, Passwort setzen), eigenes Passwort ändern; CLI-Tokens seit v0.4.0
|
||
- [x] SSH-Keys über `SchluesselQuelle` – vorgezogen in v0.3.0: eigene und Team-Schlüssel, automatisch in jedem Gast, im Assistenten abwählbar
|
||
- [x] Audit-Log-Ansicht mit Filter (Benutzer, Quelle, Text, Zeitraum), auch `GET /api/v1/protokoll`
|
||
|
||
## Akzeptanzkriterien
|
||
- [x] Operator kann keine Server/Katalog/Benutzer ändern (Tests in `tests/benutzer.test.ts`)
|
||
|
||
## Abhängigkeiten
|
||
#001
|
||
|
||
## Notizen / Entscheidungen
|
||
- **Sitzungen beenden ohne Sitzungstabelle:** `Benutzer.sitzungenAb`; ältere JWTs gelten nicht mehr.
|
||
Gesetzt bei Sperre, Passwort-Reset und eigenem Passwortwechsel (die eigene Sitzung bekommt ein
|
||
neues Cookie). Auf volle Sekunden, weil `iat` Sekunden hat.
|
||
- **Schutzregeln serverseitig:** der letzte aktive Admin bleibt Admin und aktiv (Zeilensperre gegen
|
||
zwei gleichzeitige Herabstufungen), das eigene Konto lässt sich nicht sperren.
|
||
- Benutzer werden nicht gelöscht, nur gesperrt – Aufträge und Audit-Log verweisen auf sie.
|
||
- „Einstellungen“ fehlte seit v0.3.0 in der Navigation (`ab: "#015"`) – jetzt sichtbar, dazu „Audit-Log“ für Admins.
|
||
- SSH-Schlüssel auf Florians Frage nach Schlüsseln im Template vorgezogen (2026-10-12): Schlüssel gehören in die Verwaltung, nicht ins Template. `SchluesselQuelle` ist die Andockstelle für eine externe Verwaltung (z. B. sshkeyvault).
|