User-Konzept: Auth, Sync, WebSocket-Push & Admin-UI #57
Labels
No labels
block-planning
bug
documentation
duplicate
enhancement
feature
good first issue
help wanted
infrastructure
invalid
planning
priority:high
priority:low
question
refactoring
status:backlog
status:done
status:in-progress
status:todo
tech-decision
test
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: bollwerkadmin/bollwerk#57
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
User-Konzept einführen: Username/Passwort-basierte Authentifizierung, user-spezifische Inventare, laufende Synchronisation, WebSocket-Push-Benachrichtigungen und eine minimale Admin-Web-UI zur Benutzerverwaltung.
Architektur-Überblick
1. Server: User-Verwaltung & Auth
1.1 Datenmodell
Neue Tabelle
users:idusernamepassword_hashcreated_atis_adminBestehende Tabelle
items: umuser_id(FK → users) erweitern.Bestehende Tabelle
categories/locations: umuser_id(FK → users) erweitern.1.2 Auth-Endpoints (öffentlich, kein API-Key)
/api/auth/login{ username, password }/api/auth/refresh{ refreshToken }Authorization: Bearer <token>gesendet1.3 Admin-Endpoints (nur für
is_admin = true)/api/admin/users/api/admin/users{ username, password }/api/admin/users/{id}/api/admin/users/{id}/password{ password }1.4 Seed-Admin
adminmit einem konfigurierbaren Passwort (ENV:KRISENVORRAT_ADMIN_PASSWORD) angelegt2. Server: Inventar-Endpoints (user-spezifisch)
Bisherige Endpoints werden auf den authentifizierten User geschoped:
/api/inventory/api/inventory/api/inventory/items/{id}Die User-ID wird aus dem JWT extrahiert – kein
{userId}in der URL nötig.Der bisherige API-Key-Mechanismus wird durch JWT ersetzt.
3. Server: WebSocket für Push-Benachrichtigungen
3.1 Endpoint
/ws/sync– WebSocket, JWT-Token als Query-Parameter (?token=...) oder im ersten Frame3.2 Nachrichten (Server → Client)
3.3 Verhalten
userId → Set<WebSocketSession>4. App: Login & persistente Session
4.1 Login-Screen
4.2 Token-Verwaltung
SettingsKeys: neue KeysAUTH_ACCESS_TOKEN,AUTH_REFRESH_TOKEN,AUTH_USERNAMEAPI_KEYwird entferntX-API-KeyHeader →Authorization: Bearer <accessToken>4.3 Laufende Synchronisation (App → Server)
4.4 Synchronisation (Server → App)
GET /api/inventory→ Abgleich mit lokaler DBlastUpdatedTimestamp vergleichen)5. Server: Minimale Admin-Web-UI
5.1 Umfang
Einfache HTML-Seite (statisch, vom Ktor-Server ausgeliefert):
5.2 Technologie
/api/admin/users/*)/admin/vom Ktor-Server (Static Content)6. Verschlüsselung
KRISENVORRAT_JWT_SECRET)7. Migration & Kompatibilität
users-Tabelle,user_idFK an Items/Categories/Locations)Implementierungsreihenfolge (Vorschlag)
Akzeptanzkriterien
users-Tabelle mit bcrypt-Passwort-HashPOST /api/auth/logingibt JWT (Access + Refresh) zurückPOST /api/auth/refresherneuert Access-Tokenis_admin=true/ws/syncsendet Push bei Inventar-Änderungen/admin/