add user management
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user