From c1c1ae9c88c6e1bbfab46a7d1e6a92d443ad5e30 Mon Sep 17 00:00:00 2001 From: patrick Date: Sat, 12 Sep 2026 20:52:54 +0200 Subject: [PATCH] docs(PROJ-13): add technical design for SYSTEM_ADMIN role MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Claude-Session: https://claude.ai/code/session_0143yYvjesjHndBACoweyK67 --- features/INDEX.md | 2 +- features/PROJ-13-system-admin-rolle.md | 40 ++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/features/INDEX.md b/features/INDEX.md index 65bb0bd..30e29a1 100644 --- a/features/INDEX.md +++ b/features/INDEX.md @@ -24,7 +24,7 @@ | 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-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-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 | diff --git a/features/PROJ-13-system-admin-rolle.md b/features/PROJ-13-system-admin-rolle.md index d38fae7..8c1233a 100644 --- a/features/PROJ-13-system-admin-rolle.md +++ b/features/PROJ-13-system-admin-rolle.md @@ -34,3 +34,43 @@ Erste Umsetzung der in PRD/vereinschat-Doku vorgesehenen `SYSTEM_ADMIN`-Rolle: e ## 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). + +## 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.