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

75 lines
2.7 KiB
Markdown

# 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` | **edit**`setPassword` 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