- Logged details of the session addressing compiler warnings and roles in the dashboard POC under `docs/99_Journal/2026-03-19_Session_Log_POC_Rollen_Keycloak.md`. - Documented Keycloak realm import challenges and resolution strategy for PostgreSQL volume reset. - Verified JWT role extraction and dashboard routing logic for ADMIN and ORGANIZER roles. - Included session outcomes and next steps for further validation and testing of the POC setup. Signed-off-by: Stefan Mogeritsch <stefan.mo.co@gmail.com>
5.3 KiB
Session Log: 19.03.2026 - POC Rollen-basiertes Dashboard & Keycloak-Fix
Teilnehmer: Owner, 🏗️ [Lead Architect], 🎨 [Frontend Expert], 🧹 [Curator]
Ziel der Session
Übernahme und Weiterführung eines POC, der zuvor mit Gemini begonnen wurde. Ziel war es, die rollenbasierte Dashboard-Trennung (Admin vs. Veranstalter) sowohl in der Web-App als auch in der Desktop-App zum Laufen zu bringen.
Ausgangslage (aus Gemini-Chat-Verlauf übernommen)
Der vorherige Chat-Verlauf (docs/Neumarkt2026/Chat-Verlauf-Gemini_2026-03-19_16-30.txt) wurde analysiert.
Folgende Punkte waren bereits implementiert, aber noch nicht vollständig verifiziert:
LoginScreen.kt: Tab-Navigation,singleLine = truefür Enter/Tab-BehandlungPlatformType:expect/actual-Mechanismus (currentPlatform()) fürWEBvs.DESKTOPAppScreen.kt:Loginalsdata class Login(val returnTo: AppScreen? = null)MainApp.kt: 4-Wege-Weiche für rollenbasiertes RoutingAuthTokenManager.kt: Extraktion vonrealm_access.rolesaus JWT,isAdmin()undisOrganizer()meldestelle-realm.json: RolleORGANIZER, Test-Userurfv_neumarkt(Passwort:Turnier#2026)
Durchgeführte Fixes
Fix 1 – Compiler-Warnung behoben (AuthTokenManager.kt)
Problem: Json { ignoreUnknownKeys = true } wurde als Instanz-Variable deklariert → bei jeder Instanz neu erstellt.
Warnung:
w: Redundant creation of Json format. Creating instances for each usage can be slow.
Lösung: jsonParser in ein companion object verschoben → wird nur einmal pro Klasse erstellt.
companion object {
// Shared Json instance – einmalig erstellt, nicht bei jedem Aufruf
private val jsonParser = Json { ignoreUnknownKeys = true }
}
Fix 2 – Web-Sicht nach Rollen aufgeteilt (MainApp.kt)
Die 4-Wege-Weiche in DashboardScreen war bereits korrekt implementiert:
| Platform | Rolle | Dashboard |
|---|---|---|
| Desktop | ADMIN |
Steuerungszentrale (alle Turniere, Filter, Toggles) |
| Desktop | ORGANIZER |
Meldestellen-Software (Turnier initialisieren) |
| Web | ADMIN |
Admin-Web-Portal + Download "Master-Desktop-App" |
| Web | ORGANIZER |
Veranstalter-Portal + Download "Meldestelle-App" + Aktivierungs-Code |
Fix 3 – Keycloak-Config verifiziert (meldestelle-realm.json)
- Rolle
ORGANIZERvorhanden ✅ - User
urfv_neumarktmit RollenUSER+ORGANIZERkorrekt konfiguriert ✅ - User
adminmit RolleADMINkorrekt konfiguriert ✅
Problem: Beide User sahen dasselbe Dashboard
Symptom: Nach dem Login als admin und als urfv_neumarkt wurde immer dasselbe Dashboard angezeigt.
Ursache: Keycloak startet mit --import-realm und speichert alle Daten in PostgreSQL (postgres-data Volume).
Der Realm wird nur beim allerersten Start importiert, wenn er noch nicht in der Datenbank existiert.
Alle späteren Änderungen an der meldestelle-realm.json werden ignoriert, solange das PostgreSQL-Volume existiert.
→ Die Rollen ADMIN und ORGANIZER waren nie in Keycloak angekommen, weil das Volume noch den alten Stand enthielt.
Lösung: PostgreSQL-Volume zurücksetzen
# Schritt 1 – Alle Container stoppen
docker compose down
# Schritt 2 – PostgreSQL-Volume löschen (⚠️ alle DB-Daten gehen verloren – für POC OK)
docker volume rm meldestelle_postgres-data
# Schritt 3 – Container neu starten (Keycloak importiert Realm frisch)
docker compose --profile infra up -d
Verifikation nach dem Neustart
Nach dem Neustart muss das JWT-Token die korrekten Rollen enthalten. Prüfung via jwt.io oder Browser-DevTools → Network-Tab → Token-Request:
Für admin:
"realm_access": {
"roles": ["ADMIN", "USER", "MELD_USER", ...]
}
Für urfv_neumarkt:
"realm_access": {
"roles": ["USER", "ORGANIZER"]
}
Sobald die Rollen korrekt im JWT sind, funktioniert die Dashboard-Weiche in DashboardScreen automatisch.
Aktualisierte Dateien
| Datei | Änderung |
|---|---|
frontend/core/auth/src/commonMain/kotlin/.../AuthTokenManager.kt |
jsonParser in companion object verschoben (Compiler-Warnung behoben) |
config/docker/keycloak/meldestelle-realm.json |
Verifiziert – keine Änderungen notwendig |
frontend/shells/meldestelle-portal/src/commonMain/kotlin/MainApp.kt |
Verifiziert – 4-Wege-Weiche korrekt implementiert |
Offene Punkte / Nächste Schritte
- PostgreSQL-Volume zurücksetzen und Keycloak neu starten (muss vom Owner manuell durchgeführt werden)
- JWT-Token nach Neustart verifizieren (jwt.io)
- End-to-End-Test: Login als
admin→ Admin-Dashboard, Login alsurfv_neumarkt→ Veranstalter-Dashboard