# 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