2.4 KiB
2.4 KiB
Architektur-Kompass
Letzte Aktualisierung: 2026-02-23
Kurze, verbindliche Architekturübersicht für den aktuellen Stand.
Begriffe (kurz)
Tenant: Mandant, isolierter Daten- und Berechtigungsraum.Department: optionale organisatorische Untereinheit innerhalb eines Tenants.Role: Bündel von Berechtigungen.Permission: einzelne Berechtigung wieusers.view.Policy: zentrale Autorisierungsregel für eine konkrete Fähigkeit.Ability: technischer Name einer Policy-Regel, z. B.admin.users.edit.submit.AuthorizationDecision: Ergebnis einer Policy (allow/deny, HTTP-Status, Fehlercode, Attribute).Tenant-Scope: Regel, ob ein User eine Ressource im Ziel-Tenant sehen oder ändern darf.Request: einzelner HTTP-Aufruf.Action: Datei unterpages/**, verarbeitet den Request.Service: Fachlogik unterlib/Service/**.Repository: SQL- und Mapping-Schicht unterlib/Repository/**.UUID-first: externe API gibt nur UUIDs aus, keine internen IDs.Contract-Test: Test für Architektur- und Schnittstellenregeln.
Zielbild (Stand heute)
- Server-gerenderte App plus REST-API unter
/api/v1. - Strikte Multi-Tenant-Isolation.
- Zentrale Autorisierung über
AuthorizationServiceund Policies. - API-Verträge sind UUID-first.
Request-Flow (verbindlich)
web/index.phplädt Bootstrap, Routing und Konfiguration.- Firewall, Session, Locale und Access-Control laufen.
- Action unter
pages/**nimmt Request an. - Action delegiert Fachlogik an Services.
- Services nutzen Repositories für Datenzugriff.
- Response wird als HTML, JSON oder Datei ausgegeben.
Schichtregeln (MUSS)
pages/**: Input, Auth/AuthZ, Service-Aufruf, Response. Keine duplizierte Business-Logik.lib/Service/**: Fachlogik und Orchestrierung. Keine Superglobals, keine Header/Redirect-Ausgabe.lib/Repository/**: SQL, Filter, Paging, Mapping. Keine HTTP-, Session- oder Policy-Logik.templates/**: nur Rendering.
Sicherheits- und API-Regeln (MUSS)
- Autorisierung nur zentral über Policies.
- Tenant-Scope nicht lokal nachbauen.
- Scope-Denials pro Endpunkt-Semantik als
403oder404. - API-Fehler einheitlich:
error, optionalerrors. - OpenAPI wird bei API-Änderungen im selben Merge aktualisiert.
Merge-Mindestchecks
docker compose exec php vendor/bin/phpunitdocker compose exec php vendor/bin/phpstan analyse -c phpstan.neon --no-progress