Files
CapaKraken/plan.md
T
Hartmut bc6afefeae feat: admin set password for users + fix dashboard cache error
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>
2026-03-23 09:32:38 +01:00

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.create Mutation hat Passwort-Support (Argon2 Hashing via @node-rs/argon2)
  • Kein setPassword oder resetPassword Mutation fuer bestehende User
  • UsersClient hat Passwort nur im Create-Formular, nicht im Edit-Bereich

Soll-Zustand:

  • Neuer setPassword adminProcedure 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 editsetPassword Mutation hinzufuegen
apps/web src/components/admin/UsersClient.tsx edit — "Set Password" Button + Modal

Task-Liste

  • Task 1: setPassword Mutation → 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 wie create)
    • 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!)
  • 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