docs(PROJ-13): add technical design for SYSTEM_ADMIN role

New boolean flag on the login account (not tied to any organization
membership), checked on every request like the existing org-role
pattern. No UI to grant it — DB-only for MVP. Status set to In Progress.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0143yYvjesjHndBACoweyK67
This commit is contained in:
patrickandClaude Sonnet 5 committed 2026-09-12 20:52:54 +02:00
1 parent 0359121919
commit c1c1ae9c88
2 files changed
+41 -1

No files matched your search

+1 -1
View File
@@ -24,7 +24,7 @@
| PROJ-10 | Deployment (Docker Compose + Synapse Installer) | Deployed | [PROJ-10-deployment.md](PROJ-10-deployment.md) | 2026-09-11 | | PROJ-10 | Deployment (Docker Compose + Synapse Installer) | Deployed | [PROJ-10-deployment.md](PROJ-10-deployment.md) | 2026-09-11 |
| PROJ-11 | Chat (Matrix Client-Server API) | Deployed | [PROJ-11-chat.md](PROJ-11-chat.md) | 2026-09-11 | | PROJ-11 | Chat (Matrix Client-Server API) | Deployed | [PROJ-11-chat.md](PROJ-11-chat.md) | 2026-09-11 |
| PROJ-12 | Automatische Löschfrist für ausgetretene Mitglieder (DSGVO) | Planned | [PROJ-12-mitglieder-loeschfrist.md](PROJ-12-mitglieder-loeschfrist.md) | 2026-09-11 | | PROJ-12 | Automatische Löschfrist für ausgetretene Mitglieder (DSGVO) | Planned | [PROJ-12-mitglieder-loeschfrist.md](PROJ-12-mitglieder-loeschfrist.md) | 2026-09-11 |
| PROJ-13 | SYSTEM_ADMIN-Rolle | Planned | [PROJ-13-system-admin-rolle.md](PROJ-13-system-admin-rolle.md) | 2026-09-12 | | PROJ-13 | SYSTEM_ADMIN-Rolle | In Progress | [PROJ-13-system-admin-rolle.md](PROJ-13-system-admin-rolle.md) | 2026-09-12 |
| PROJ-14 | Synapse Raum-Übersicht (System-Admin) | Planned | [PROJ-14-synapse-raum-uebersicht.md](PROJ-14-synapse-raum-uebersicht.md) | 2026-09-12 | | PROJ-14 | Synapse Raum-Übersicht (System-Admin) | Planned | [PROJ-14-synapse-raum-uebersicht.md](PROJ-14-synapse-raum-uebersicht.md) | 2026-09-12 |
| PROJ-15 | Media-Cleanup (System-Admin) | Planned | [PROJ-15-media-cleanup.md](PROJ-15-media-cleanup.md) | 2026-09-12 | | PROJ-15 | Media-Cleanup (System-Admin) | Planned | [PROJ-15-media-cleanup.md](PROJ-15-media-cleanup.md) | 2026-09-12 |
| PROJ-16 | Federation-Status (System-Admin) | Planned | [PROJ-16-federation-status.md](PROJ-16-federation-status.md) | 2026-09-12 | | PROJ-16 | Federation-Status (System-Admin) | Planned | [PROJ-16-federation-status.md](PROJ-16-federation-status.md) | 2026-09-12 |
+40
View File
@@ -34,3 +34,43 @@ Erste Umsetzung der in PRD/vereinschat-Doku vorgesehenen `SYSTEM_ADMIN`-Rolle: e
## Notes ## Notes
Reine Backend-/Grundlagen-Feature ohne eigenständigen sichtbaren Mehrwert — wird zusammen mit dem ersten der vier abhängigen Features (empfohlen: [[PROJ-14]]) implementiert, nicht isoliert deploybar im engeren Sinn (aber testbar: Rolle setzen, `/api/auth/me` prüfen). Reine Backend-/Grundlagen-Feature ohne eigenständigen sichtbaren Mehrwert — wird zusammen mit dem ersten der vier abhängigen Features (empfohlen: [[PROJ-14]]) implementiert, nicht isoliert deploybar im engeren Sinn (aber testbar: Rolle setzen, `/api/auth/me` prüfen).
## Tech Design (Solution Architect)
### A) Komponenten-Struktur
```
Dashboard (bestehend)
└── Navigationsbereich (bestehend: Rollen & Rechte, Aktivitäten, Abmelden)
└── NEU: "System-Admin"-Link
(nur sichtbar, wenn der eingeloggte Nutzer die neue Kennzeichnung trägt —
sonst exakt wie heute, kein sichtbarer Unterschied für alle anderen Nutzer)
```
Kein neuer Bildschirm in diesem Feature selbst — nur der Türsteher (Berechtigungsprüfung) und der Navigationseintrag, der zu den in PROJ-14/15/16/18 gebauten Unterseiten führen wird.
### B) Datenmodell (in einfachen Worten)
Der bestehende Login-Datensatz (Konto, nicht Vereinsmitgliedschaft) bekommt ein neues Merkmal:
```
Jedes Konto hat zusätzlich:
- System-Admin: Ja/Nein (Standard: Nein)
```
Das ist bewusst **losgelöst von Vereinen** — ein Konto kann in mehreren Vereinen unterschiedliche Rollen haben (Vereinsadmin hier, normales Mitglied dort), aber "System-Admin" gilt plattformweit oder gar nicht, unabhängig davon.
Gespeichert wird das direkt am Konto (Login-Tabelle) — nicht in der Mitgliederliste eines Vereins, weil es nichts mit einer bestimmten Vereinsmitgliedschaft zu tun hat.
### C) Tech-Entscheidungen (Begründung)
- **Kein Bildschirm zum Vergeben der Rolle:** Die Rolle wird laut Anforderung nur manuell direkt in der Datenbank gesetzt. Das ist bewusst minimal für den Start — ein Verwaltungsbildschirm dafür wäre selbst wieder ein Sicherheitsrisiko (wer darf wen zum System-Admin machen?) und lohnt sich erst, wenn es tatsächlich mehrere System-Admins braucht.
- **Prüfung bei jeder Anfrage, nicht nur beim Login:** Genau wie bei den bestehenden Vereinsrollen wird bei jeder Anfrage an eine geschützte Funktion erneut geprüft, ob die Kennzeichnung noch gesetzt ist — nicht nur einmalig beim Anmelden gespeichert. So wirkt ein Entzug der Rolle sofort, ohne dass sich die Person neu anmelden muss.
- **Merkmal am Login-Konto statt an einer Vereinsmitgliedschaft:** Konsistent mit der Vorgabe "plattformweit, unabhängig von jedem Verein" — an einer Mitgliedschaft zu speichern würde fälschlich einen Vereinsbezug herstellen.
### D) Abhängigkeiten (neue Pakete)
Keine — nutzt ausschließlich bereits vorhandene Bausteine (Datenbank-Erweiterung, bestehendes Berechtigungssystem-Muster).
### Offene Voraussetzung für die Folge-Features
PROJ-14/15/16/18 bauen eigene, neue Backend-Funktionen und Bildschirme auf dieser Berechtigungsprüfung auf — dieses Feature liefert nur das Fundament, ohne das die anderen vier nicht sicher wären.