add user management
This commit is contained in:
148
patch_history/RETRIEX_PATCH_93_ADMIN_USER_MANAGEMENT_README.md
Normal file
148
patch_history/RETRIEX_PATCH_93_ADMIN_USER_MANAGEMENT_README.md
Normal file
@@ -0,0 +1,148 @@
|
||||
# RETRIEX PATCH 93 - Admin User Management CRUD
|
||||
|
||||
## Ziel
|
||||
|
||||
Ergaenzt eine saubere Benutzerverwaltung im Adminbereich, damit neue Benutzer nicht mehr nur per Console angelegt werden muessen.
|
||||
|
||||
Der Patch fuegt CRUD-nahe Adminfunktionen fuer Benutzer hinzu:
|
||||
|
||||
- Benutzerliste im Adminbereich
|
||||
- Benutzer anlegen
|
||||
- Benutzer bearbeiten
|
||||
- Rollen zuweisen
|
||||
- Passwort setzen bzw. zuruecksetzen
|
||||
- Benutzer aktivieren/deaktivieren
|
||||
- Self-Protection gegen versehentliches Aussperren
|
||||
- Login-Blocker fuer deaktivierte Benutzer
|
||||
|
||||
## Architektur
|
||||
|
||||
Der Patch greift nicht in RAG-, Retrieval-, Scoring-, Prompt-, Shop- oder Chat-Antwortlogik ein.
|
||||
|
||||
Neue Admin-Route:
|
||||
|
||||
- `GET /admin/users`
|
||||
- `GET /admin/users/create`
|
||||
- `POST /admin/users/create`
|
||||
- `GET /admin/users/{id}/edit`
|
||||
- `POST /admin/users/{id}/edit`
|
||||
- `POST /admin/users/{id}/toggle-active`
|
||||
|
||||
Alle Routen sind nur fuer `ROLE_SUPER_ADMIN` erreichbar.
|
||||
|
||||
## Neue Dateien
|
||||
|
||||
- `src/Controller/Admin/UserController.php`
|
||||
- `src/Service/Admin/UserAdminService.php`
|
||||
- `src/Security/ApplicationRoles.php`
|
||||
- `src/Security/ActiveUserChecker.php`
|
||||
- `src/Security/ActiveUserSessionSubscriber.php`
|
||||
- `templates/admin/user/index.html.twig`
|
||||
- `templates/admin/user/create.html.twig`
|
||||
- `templates/admin/user/edit.html.twig`
|
||||
|
||||
## Geaenderte Dateien
|
||||
|
||||
- `config/packages/security.yaml`
|
||||
- `templates/admin/base.html.twig`
|
||||
- `src/Repository/UserRepository.php`
|
||||
- `src/Command/CreateUserCommand.php`
|
||||
|
||||
## Optimierungen gegenueber dem ersten Konzept
|
||||
|
||||
- Rollen werden zentral in `ApplicationRoles` gepflegt.
|
||||
- Admin-UI und Console-Command nutzen dieselbe Rollenquelle.
|
||||
- Benutzerliste hat einfache Filter fuer Suche, Status und Rolle.
|
||||
- `isActive` ist nicht nur ein UI-Feld, sondern wird ueber `ActiveUserChecker` beim Login erzwungen.
|
||||
- Bereits angemeldete deaktivierte Benutzer werden ueber `ActiveUserSessionSubscriber` aus der Session abgemeldet.
|
||||
- Kein hartes Delete im ersten Schritt, um Referenzprobleme mit Dokumenten, Versionen oder Jobs zu vermeiden.
|
||||
|
||||
## Rollen
|
||||
|
||||
Zuweisbare Rollen:
|
||||
|
||||
- `ROLE_SUPER_ADMIN`
|
||||
- `ROLE_KNOWLEDGE_ADMIN`
|
||||
- `ROLE_EDITOR`
|
||||
- `ROLE_ADMIN_AREA`
|
||||
- `ROLE_CHAT_USER`
|
||||
|
||||
`ROLE_USER` bleibt bewusst nicht manuell auswaehlbar, weil `User::getRoles()` diese Rolle automatisch ergaenzt.
|
||||
|
||||
## Schutzregeln
|
||||
|
||||
Der Patch verhindert:
|
||||
|
||||
- eigenen Benutzer deaktivieren
|
||||
- eigene `ROLE_SUPER_ADMIN`-Rolle entfernen
|
||||
- letzten aktiven Super-Admin deaktivieren
|
||||
- letzten aktiven Super-Admin demoten
|
||||
- Login mit deaktiviertem Benutzer
|
||||
- Weiterbenutzung bereits bestehender Sessions nach Deaktivierung
|
||||
|
||||
## Console-Command
|
||||
|
||||
`mto:agent:user:create` bleibt erhalten und wurde vereinheitlicht:
|
||||
|
||||
- nutzt `ApplicationRoles`
|
||||
- erlaubt mehrere Rollen per Mehrfachauswahl
|
||||
- fragt Passwort-Wiederholung ab
|
||||
- fragt Aktivstatus ab
|
||||
|
||||
## Lokale Checks
|
||||
|
||||
Ausgefuehrt im Patch-Arbeitsstand:
|
||||
|
||||
```bash
|
||||
php -l src/Security/ApplicationRoles.php
|
||||
php -l src/Security/ActiveUserChecker.php
|
||||
php -l src/Security/ActiveUserSessionSubscriber.php
|
||||
php -l src/Repository/UserRepository.php
|
||||
php -l src/Service/Admin/UserAdminService.php
|
||||
php -l src/Controller/Admin/UserController.php
|
||||
php -l src/Command/CreateUserCommand.php
|
||||
python3 -c "import yaml; yaml.safe_load(open('config/packages/security.yaml'))"
|
||||
```
|
||||
|
||||
Twig wurde per Delimiter-Smoke-Test geprueft.
|
||||
|
||||
Nicht lokal ausfuehrbar, weil `vendor/` im ZIP nicht enthalten ist:
|
||||
|
||||
```bash
|
||||
php bin/console lint:yaml config/packages/security.yaml
|
||||
php bin/console lint:twig templates/admin/user
|
||||
php bin/console debug:router | grep admin_users
|
||||
```
|
||||
|
||||
## Empfohlene Checks in der Zielumgebung
|
||||
|
||||
```bash
|
||||
php bin/console cache:clear
|
||||
php bin/console lint:yaml config/packages/security.yaml
|
||||
php bin/console lint:twig templates/admin/user
|
||||
php bin/console debug:router | grep admin_users
|
||||
php bin/console mto:agent:config:validate
|
||||
php bin/console mto:agent:regression:test
|
||||
php bin/console mto:agent:config:audit-source --details
|
||||
```
|
||||
|
||||
## Manuelle Testfaelle
|
||||
|
||||
1. Als `ROLE_SUPER_ADMIN` `/admin/users` oeffnen.
|
||||
2. Neuen Chat-User mit `ROLE_CHAT_USER` anlegen.
|
||||
3. Mit diesem User im Chat einloggen.
|
||||
4. User deaktivieren und Login im Chat pruefen.
|
||||
5. User wieder aktivieren und Login pruefen.
|
||||
6. Passwort im Edit-Formular setzen und Login pruefen.
|
||||
7. Versuch: eigener Benutzer deaktivieren -> muss blockieren.
|
||||
8. Versuch: eigene `ROLE_SUPER_ADMIN` entfernen -> muss blockieren.
|
||||
9. Versuch: letzter aktiver Super-Admin deaktivieren/demoten -> muss blockieren.
|
||||
|
||||
## Bewusst nicht enthalten
|
||||
|
||||
- hartes Loeschen von Benutzern
|
||||
- Passwort-Reset per E-Mail
|
||||
- Einladungslinks
|
||||
- Audit-Log fuer Useraenderungen
|
||||
- 2FA
|
||||
- Mandantenfaehigkeit
|
||||
Reference in New Issue
Block a user