Status: Accepted
Datum: 2026-01-11
Entscheider: Gernot Starke
Kontext
Aquarius benötigt mehrere unterschiedliche User-Rollen:
- Admin: Verwaltung von Benutzern, Systemkonfiguration, Monitoring
- CLEO: Chief League & Executive Officer, die Sonder-Rolle für Fritz Flosse, den Liga-Präsidenten.
- Verwaltung: Zugriff auf die Wettkampf-Verwaltungsanwendung mit Lese-/Schreibrechten
- Offizielle: Können Figuren/Durchführungen/Starts bei Wettkämpfen bewerten, und Anmeldungen für den jeweiligen Wettkampf löschen.
- Teilnehmende: Können sich selbst anmelden, ihre eigenen Stammdaten ändern, Ergebnislisten sehen.
Anforderungen:
- Vereinfachte Lokalentwicklung ohne obligatorische Authentifizierung
- Produktionsumgebung mit vollständiger Authentifizierung
- Granulare Berechtigungen (Lesen vs. Schreiben)
- Einfaches Bootstrap-Verfahren für die erste Benutzer-Erstellung
Entscheidung
Wir implementieren ein umgebungsgestütztes App-Authentifizierungssystem:
Backend-Architektur
- User-Modell erweitern (
app/models/user.py):is_app_user: bool- Markiert App-Benutzer vs. reine Admin-Benutzercan_read_all: bool- Lesezugriff auf App-Datencan_write_all: bool- Schreib-/Änderungs-/Löschzugriff
- Umgebungsvariablen:
ENABLE_APP_AUTH=false # Entwicklung: Auto-Login ohne Token ENABLE_APP_AUTH=true # Produktion: Vollständige Authentifizierung erforderlich DEFAULT_APP_USER=testuser # Benutzername für automatischen Login in Entwicklung - Authentifizierungs-Dependencies (
app/auth.py):get_current_app_user(): Intelligente Dependency für beide Modirequire_app_read_permission(): Gatekeeping für Lesezugriffrequire_app_write_permission(): Gatekeeping für Schreibzugriffget_or_create_default_app_user(): Automatische Erstellung des Standard-Benutzers in Entwicklung
- Endpoint-Schutz:
- GET-Operationen:
@Depends(require_app_read_permission) - POST/PUT/DELETE:
@Depends(require_app_write_permission) - Admin (ROOT) umgeht alle Berechtigungsprüfungen
- GET-Operationen:
Frontend-Architektur
- Auth-Context (
src/context/AuthContext.tsx):- Verwaltet Benutzerinfo und Token
- Stellt
canRead/canWrite-Flags bereit - Lädt Benutzer auf App-Startup
- Routen-Schutz:
- Neue
AppLoginGuardfür App-Routen - Fallback zu
/app/loginwenn kein Token vorhanden
- Neue
- Permission-basierte UI-Gates:
- Lesevorgänge: Immer aktiviert
- Schreibzugriff: Buttons/Formulare deaktivieren wenn
!canWrite - Visuelles Feedback: Read-Only-Indikator
- Benutzermenü (Option 1):
- Top-Right-Ecke mit Benutzerinformationen
- Link zum Admin-Dashboard (if ROOT)
- Logout-Button
Bootstrap-Verfahren
Entwicklung (ENABLE_APP_AUTH=false):
- Bei
make devwird automatisch eintestusermit Passwortdev-passworderstellt - Volle Lese-/Schreibrechte
- Keine manuelle Login erforderlich
Produktion (ENABLE_APP_AUTH=true):
- Beim initialen Deployment: Kein Standard-Benutzer
- Admin erstellt erste App-Benutzer über das Admin-Panel
- User loggen sich dann über
/app/loginein
Referenzen
- ADR-009: Testkonzept - Auswirkungen auf Tests
- ADR-014: Python FastAPI Backend - Backend-Framework
- ADR-002: React Router - Frontend-Routing
- 09-user-management-admin-concept.adoc - Admin-Benutzer (verwandt)