bc6afefeae
Admin Set Password: - New setPassword adminProcedure in user router (Argon2 hashing) - Audit log: "Password reset by admin" (no password value logged) - UI: per-user "Password" button with key icon in User Management - Modal: new password + confirm, min 8 chars, mismatch validation - Success toast + auto-close on completion Dashboard fix: - Corrupted .next cache causing "Cannot find module worker.js" - Fixed by clearing .next cache and restarting dev server Co-Authored-By: claude-flow <ruv@ruv.net>
2.7 KiB
2.7 KiB
Admin Set Password — Plan
Anforderungsanalyse
Was: Admins sollen im User-Management das Passwort fuer beliebige User setzen/zuruecksetzen koennen.
Ist-Zustand:
user.createMutation hat Passwort-Support (Argon2 Hashing via@node-rs/argon2)- Kein
setPasswordoderresetPasswordMutation fuer bestehende User - UsersClient hat Passwort nur im Create-Formular, nicht im Edit-Bereich
Soll-Zustand:
- Neuer
setPasswordadminProcedure im user Router - "Set Password" Button pro User im Admin-UI
- Passwort-Modal mit Eingabe + Bestaetigung
- Audit-Log Eintrag bei Passwort-Aenderung (ohne Passwort-Wert!)
Betroffene Pakete & Dateien
| Paket | Dateien | Art der Aenderung |
|---|---|---|
packages/api |
src/router/user.ts |
edit — setPassword Mutation hinzufuegen |
apps/web |
src/components/admin/UsersClient.tsx |
edit — "Set Password" Button + Modal |
Task-Liste
-
Task 1:
setPasswordMutation →packages/api/src/router/user.ts- Input:
{ userId: string, password: string }(min 8 Zeichen) - adminProcedure (nur Admins duerfen Passwoerter setzen)
- Hash mit
@node-rs/argon2(gleiches Pattern wiecreate) db.user.update({ where: { id }, data: { passwordHash } })- Audit-Log:
createAuditEntry({ entityType: "User", action: "UPDATE", summary: "Password reset by admin" }) - KEIN Passwort-Wert im Audit-Log (Sicherheit!)
- Input:
-
Task 2: UI — "Set Password" Button + Modal →
UsersClient.tsx- Pro User-Zeile: "Set Password" Button (Schloss-Icon)
- Klick oeffnet AnimatedModal mit:
- User-Name als Titel
- Neues Passwort Input (min 8 Zeichen)
- Passwort bestaetigen Input
- Validierung: Passwoerter muessen uebereinstimmen
- Submit-Button (disabled wenn <8 Zeichen oder nicht matching)
- Success: Toast "Password updated", Modal schliessen
- Error: Fehlermeldung anzeigen
Abhaengigkeiten
- Task 1 muss vor Task 2 (API benoetigt fuer UI)
- Beide Tasks koennen in einer Sequenz implementiert werden (gleicher Agent)
Akzeptanzkriterien
pnpm --filter @planarchy/web exec tsc --noEmit— keine neuen Errors- Admin kann Passwort fuer beliebigen User setzen
- Passwort wird mit Argon2 gehasht (nicht plaintext gespeichert)
- Audit-Log Eintrag wird erstellt (ohne Passwort-Wert)
- Min 8 Zeichen Validierung im UI und API
- Passwort-Bestaetigung muss uebereinstimmen
Risiken & offene Fragen
- Sicherheit: Nur ADMIN-Rolle darf Passwoerter setzen (adminProcedure)
- Audit: Passwort-Wert DARF NICHT im Audit-Log erscheinen
- UX: Soll der User benachrichtigt werden? → Vorschlag: Nein, Admin setzt manuell und teilt dem User das Passwort separat mit