- Added the `matrix_editor` endpoint to the ACCESS_LAYER_ENDPOINT_AUDIT.md, specifying its access requirements and exempt status for superadmins. - Updated comments in the `matrix_editor.py` file to clarify its role as a superadmin tool and its access restrictions. - Included the `matrix_editor.py` in the EXEMPT_ROUTERS list in the access layer hints script, ensuring proper access control documentation.
7.1 KiB
Endpoint-Audit: Mandanten & Governance
Fortlaufend gemäß ACCESS_LAYER_AND_GOVERNANCE_PLAN.md Stufe A–C.
| Router / Bereich | Beispiel-Endpunkt | tenant-relevant | Depends(get_tenant_context) / Kontext |
Governance geprüft (Liste+Detail) | Notizen |
|---|---|---|---|---|---|
| profiles | GET /api/profiles/me |
ja | resolve_tenant_context inline (invalid_header_policy=ignore) |
teils | + effective_club_id; veralteter Header bricht Refresh nicht |
| profiles | GET /api/profiles, GET /profiles/{pid}, POST /profiles, DELETE /profiles/{pid} |
ja/teils | require_auth |
ja | Liste nur Plattform-Admin; GET nach ID eigenes Profil oder Admin; POST/DELETE nur Admin |
| profiles | PUT /api/profiles/{id}, PUT /api/profile |
ja | get_tenant_context |
active_club_id Mitgliedschaft |
Validiert X-Active-Club-Id konsistent zu Mitgliedschaft |
| clubs | geschützte /api/clubs*, /divisions*, /groups* |
ja | get_tenant_context |
Mitgliedschaft / can_manage_* |
Öffentlich: /clubs/public-directory ohne Auth |
| club_memberships | /clubs/{id}/members* |
ja | get_tenant_context |
ja | |
| club_join_requests | /me/club-join-requests, /clubs/{id}/join-requests* |
ja | get_tenant_context |
ja | |
| exercises | PATCH /api/exercises/bulk-metadata |
ja | get_tenant_context |
ja | Liste: UI-Mehrfachwahl; bis 500 IDs; nur Ersteller oder Plattform-Admin |
| exercises | GET .../media/{mid}/file |
ja | get_tenant_context_flexible |
ja (wie Übung lesen) | Datei oder ?ssetoken; kein anonymes /media/ ohne ALLOW_PUBLIC_MEDIA_STATIC |
| exercises | übrige geschützte /api/exercises* |
ja | get_tenant_context |
ja | PUT Einzelübung: bei Sichtbarkeit official Medien-§4.2 (422: Lifecycle/Promotion/Copyright) |
| exercises | POST /api/exercises/ai/suggest, POST /api/exercises/{id}/ai/regenerate |
ja | get_tenant_context |
nein | Nur Vorschlags-JSON; keine DB-Schreibung; OpenRouter — suggest optional focus_areas_context für Retrieval-Profile |
| exercise_progression_graphs | /api/exercise-progression-graphs* |
ja | get_tenant_context |
Liste wie Bibliothek; Schreiben Ersteller/Plattform-Admin | Kanten: Lesen wenn Graph lesbar |
| training_planning | alle geschützten Endpoints | ja | get_tenant_context |
ja | Vorlagen-Liste wie Übungen; POST Vorlage Default club_id |
| dashboard | GET /api/dashboard/kpis |
ja | get_tenant_context |
wie GET /api/exercises + GET /api/training-units |
Aggregat für Dashboard-Kurzüberblick (ein Roundtrip) |
| training_modules | /api/training-modules* |
ja | get_tenant_context |
ja | Bibliotheks-Module wie Vorlagen/Rahmen; POST Default club_id bei visibility=club |
| training_framework_programs | alle geschützten Endpoints | ja | get_tenant_context |
ja | Liste + POST Default club_id |
| admin_users | GET /api/admin/users |
Plattform | require_auth |
Admin-Rolle | EXEMPT check_access_layer_hints.py |
| platform_media_storage | GET/PUT /api/admin/platform-media-storage |
Plattform | require_auth |
GET: is_platform_admin; PUT: nur superadmin |
Relativer Pfad unter MEDIA_ROOT; keine Secrets; EXEMPT wie admin_users |
| media_assets | POST /api/media-assets/{id}/lifecycle |
ja | get_tenant_context |
ja | u. a. trash_soft mit Trainer-nur-privat-Eigentum; purge nur Superadmin; Superadmin: superadmin_force_lifecycle, superadmin_hard_delete |
| media_assets | GET /api/media-assets |
ja | get_tenant_context |
ja | optional lifecycle; Standard active; Liste inkl. copyright_notice; Papierkorb-Ansicht nur sichtbare Mandanten-Assets |
| media_assets | POST /api/media-assets/bulk-lifecycle |
ja | get_tenant_context |
ja | Mehrfach-Lifecycle; gleiche Regeln wie Einzel-POST |
| media_assets | POST /api/media-assets/bulk-patch |
ja | get_tenant_context |
ja | Copyright / Bezeichner / Sichtbarkeit für viele IDs; gemischte Fehler in failed[] |
| media_assets | PATCH /api/media-assets/{id} |
ja | get_tenant_context |
ja | Copyright, original_filename, optional visibility/club_id; Rechte pro Stufe |
| media_assets | GET /api/media-assets/{id}/file |
ja | get_tenant_context_flexible |
ja | aktiv: Bibliotheks-Sichtbarkeit; trash_soft/trash_hidden: wie Lifecycle-Verwaltung |
| exercises | POST /api/exercises/{id}/media/from-asset |
ja | get_tenant_context |
ja | Verknüpfung exercise_media → bestehendes media_asset_id; Bearbeitungsrecht Übung + Leserecht Archiv |
| auth | /api/auth/* |
nein | — | Login/Session | EXEMPT |
| catalogs | Katalog-CRUD | nein (global) | require_auth |
Admin/Trainer je Endpoint | EXEMPT; bei späterem club_id nachziehen |
| skills | /api/skills* |
nein (global) | require_auth |
je Endpoint | EXEMPT |
| maturity_models | Admin-Matrix | nein (global) | require_auth |
Admin für Schreiben; GET …/{id} nur Portal-Admin |
EXEMPT |
| matrix_stack_bundle | Export/Import Bundles | Plattform/Test | require_auth |
Admin | EXEMPT |
| matrix_editor | /api/admin/matrix-editor/* (Export/Import Editor-Bundle) |
Plattform | require_auth |
nur superadmin |
EXEMPT; globale Fähigkeitsmatrix ohne Mandantenkontext |
| import_wiki / import_wiki_admin | Wiki-Import | Werkzeug | require_auth/Admin |
Admin | EXEMPT |
| ai_skill_retrieval_admin | /api/admin/ai-skill-retrieval-profiles* (CRUD) |
Plattform | require_auth |
nur superadmin; JSON config |
EXEMPT wie admin_users; kein Vereinsbezug |
| ai_prompts_admin | /api/admin/ai-prompts* (Liste, Detail, PUT, Preview, Reset) |
Plattform | require_auth |
nur superadmin |
EXEMPT; globale ai_prompts ohne Mandantenkontext |
Legende: Router auf der EXEMPT-Liste des Scripts sind globale oder Auth-only-Pfade; sobald ein Router Vereinsdaten oder Bibliotheks-Sichtbarkeit erhält, EXEMPT entfernen und get_tenant_context einführen.
Pflege / Drift: Änderungen an Mandanten, Governance (visibility/club_id) oder neuen inhaltsbezogenen Endpoints → eine Zeile in dieser Tabelle anpassen und PRODUCTION_READINESS_AUDIT_2026-05.md prüfen.
Letzte Änderung: 2026-05-30 — Superadmin /api/admin/ai-prompts* (Prompt-Pflege, Vorschau ohne OpenRouter); weiterhin suggest + Retrieval-Profile.
Changelog (Fortführung)
-
2026-05-30: Superadmin-API
ai_prompts_admin(/api/admin/ai-prompts*) dokumentiert. -
2026-05-29: Superadmin-API
ai_skill_retrieval_admin(Retrieval-Profile) dokumentiert. -
2026-05-22: Übungs-KI-Endpunkte (Suggest/Regenerate) dokumentiert.
-
2026-05-13: Dashboard-KPI-Endpunkt dokumentiert.
-
2026-05-07: Legacy
GET/PUT /api/profileauf Session-Profil gehärtet; OpenAPI/Health-Ready Produktionsdefaults; Security-Release-Tests + CI-Schrittsecurity_release_checks.py— siehePRODUCTION_READINESS_AUDIT_2026-05.md. -
2026-05-07 (Phase 3): CSP SPA (nginx); API
nosniff-Middleware — siehePRODUCTION_READINESS_AUDIT_2026-05.md.
Hinweis GET /training-units
Kein impliziter Filter nach effective_club_id (Multi-Verein-Kalender); bei Bedarf club_id Query setzen.