add user management

This commit is contained in:
team 1
2026-05-11 14:47:31 +02:00
parent acb1082398
commit e13d584025
13 changed files with 556 additions and 8 deletions

View File

@@ -0,0 +1,132 @@
# RetrieX Patch p94 - Error Pages and Access Denied UX
## Ziel
Dieser Patch ergänzt benutzerfreundliche Fehlerseiten und behandelt insbesondere den Fall, dass ein bereits eingeloggter Benutzer in einen Bereich wechselt, für den ihm die passende Rolle fehlt.
Beispiel:
- Benutzer ist im Chat angemeldet, besitzt aber keine `ROLE_ADMIN_AREA`.
- Benutzer öffnet `/admin` oder `/admin/login`.
- Statt Symfony-Default-403 oder verwirrender Login-Seite erscheint eine klare Fehlerseite mit benötigter Rolle und Abmelde-Option.
## Enthaltene Änderungen
Neue Dateien:
- `src/Security/AccessDeniedHandler.php`
- `src/Security/AccessDeniedPageRenderer.php`
- `templates/error/layout.html.twig`
- `templates/error/access_denied.html.twig`
- `templates/bundles/TwigBundle/Exception/error403.html.twig`
- `templates/bundles/TwigBundle/Exception/error404.html.twig`
- `templates/bundles/TwigBundle/Exception/error500.html.twig`
- `templates/bundles/TwigBundle/Exception/error.html.twig`
Geänderte Dateien:
- `config/packages/security.yaml`
- `src/Controller/Admin/SecurityController.php`
- `src/Controller/Chat/SecurityController.php`
## Verhalten
### 403 / fehlende Rolle
Der neue `AccessDeniedHandler` rendert eine konsistente 403-Seite für Admin- und Chat-Firewalls.
Die Seite zeigt:
- Bereich, z. B. `Adminbereich` oder `Chatbereich`
- benötigte Rolle, z. B. `ROLE_ADMIN_AREA` oder `ROLE_CHAT_USER`
- angemeldeten Benutzer
- Link zurück in einen Bereich, für den der Benutzer Rechte hat
- Abmelde-Link, um sich mit einem anderen Benutzer anzumelden
### Login mit falschem Bereich
Die Login-Controller behandeln nun explizit den Fall:
- Benutzer ist bereits authentifiziert
- Benutzer hat aber nicht die Zielrolle des Loginbereichs
Dann wird direkt die 403-Seite gerendert, statt erneut die Login-Maske zu zeigen.
### Generische Fehlerseiten
Symfony/Twig Exception-Templates wurden ergänzt für:
- `403`
- `404`
- `500`
- generische Fehler
Diese greifen insbesondere im produktiven Fehlerhandling. Für Access-Denied-Fälle greift zusätzlich der Security-Handler auch unabhängig vom generischen Exception-Template.
## Security-Konfiguration
Beide Firewalls nutzen nun denselben Handler:
```yaml
admin:
access_denied_handler: App\Security\AccessDeniedHandler
chat:
access_denied_handler: App\Security\AccessDeniedHandler
```
## Nicht geändert
Keine Änderungen an:
- `AgentRunner`
- Retrieval
- Scoring
- Shop-Matching
- PromptBuilder
- RAG-/Commerce-YAMLs
- User-CRUD-Fachlogik aus p93
## Lokale Checks
Ausgeführt:
```bash
php -l src/Security/AccessDeniedPageRenderer.php
php -l src/Security/AccessDeniedHandler.php
php -l src/Controller/Admin/SecurityController.php
php -l src/Controller/Chat/SecurityController.php
python3 -c "import yaml; yaml.safe_load(open('config/packages/security.yaml'))"
```
Symfony-Console-Checks konnten lokal nicht ausgeführt werden, weil `vendor/` im ZIP nicht enthalten ist.
## Empfohlene Prüfungen in der Zielumgebung
```bash
php bin/console lint:yaml config/packages/security.yaml
php bin/console lint:twig templates/error templates/bundles/TwigBundle/Exception
php bin/console cache:clear
php bin/console debug:container App\Security\AccessDeniedHandler
php bin/console debug:router | grep -E 'admin_login|chat_login|admin_dashboard|chat_index'
php bin/console mto:agent:config:validate
php bin/console mto:agent:regression:test
php bin/console mto:agent:config:audit-source --details
```
## Manuelle Smoke-Tests
1. Als reiner `ROLE_CHAT_USER` einloggen und `/admin` öffnen.
- Erwartung: 403-Seite mit benötigter Rolle `ROLE_ADMIN_AREA`.
2. Als reiner `ROLE_ADMIN_AREA` ohne `ROLE_CHAT_USER` `/chat` öffnen.
- Erwartung: 403-Seite mit benötigter Rolle `ROLE_CHAT_USER`.
3. Als deaktivierter User einloggen.
- Erwartung: Login wird weiterhin durch p93 `ActiveUserChecker` blockiert.
4. Nicht existente Route öffnen, z. B. `/admin/foo-does-not-exist`.
- Erwartung: freundliche 404-Fehlerseite, sofern Exception-Handling im Prod-Modus aktiv ist.
5. Fehler im Prod-Modus provozieren.
- Erwartung: freundliche 500-Seite mit Link zu System-Logs für Admin-User.