91 lines
3.4 KiB
Markdown
91 lines
3.4 KiB
Markdown
|
|
# Rechte & Kontingente — Registry-first (Zielarchitektur)
|
|||
|
|
|
|||
|
|
**Stand:** 2026-06-07 · **Status:** verbindlich (korrigiert Katalog-first aus Migration 079)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. Problem mit dem Katalog-first-Ansatz
|
|||
|
|
|
|||
|
|
Migration `079_capabilities.sql` hat **~70 Rechte vorab** in die DB geschrieben — aus einer Spekulation über die fertige App. Das ist für ein System im Aufbau **verkehrt herum**:
|
|||
|
|
|
|||
|
|
- Vollständige Liste ist **nicht möglich** und nicht wünschenswert
|
|||
|
|
- Die Matrix **suggeriert** Funktionen, die es am Endpoint noch nicht gibt
|
|||
|
|
- Module **registrieren sich nicht** — alles war manueller Seed
|
|||
|
|
|
|||
|
|
**Korrektur:** Registry-first — wie bei anderen Registries im Projekt (z. B. Platzhalter-Pflicht).
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. Zielbild
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
Modul implementiert Feature
|
|||
|
|
→ register_capability() / register_feature() in rights_registrations/<modul>.py
|
|||
|
|
→ Startup: sync_rights_registry_to_db()
|
|||
|
|
→ Admin „Rollen & Rechte“ zeigt nur Einträge mit module IS NOT NULL
|
|||
|
|
→ Endpoint: probe_capability + probe/consume Kontingent
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
| Achse | Registrierung | Konfiguration Admin |
|
|||
|
|
|-------|---------------|---------------------|
|
|||
|
|
| **Recht** | `CapabilityRegistration` | Matrix Vereins-/Portal-Rollen |
|
|||
|
|
| **Kontingent** | `FeatureRegistration` | Vereinspläne / Limits |
|
|||
|
|
|
|||
|
|
Kein neuer Eintrag in `079`-artigen Bulk-Migrations für fachliche Rechte.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. Implementierung (Code)
|
|||
|
|
|
|||
|
|
| Pfad | Rolle |
|
|||
|
|
|------|--------|
|
|||
|
|
| `backend/rights_registry.py` | `register_capability`, `register_feature`, `sync_rights_registry_to_db` |
|
|||
|
|
| `backend/rights_registrations/*.py` | Pro Modul nur **tatsächlich verdrahtete** Rechte/Kontingente |
|
|||
|
|
| `backend/main.py` | Sync nach Migrationen |
|
|||
|
|
| Migration `084_rights_registry_module.sql` | Spalte `module` auf `capabilities` + `features` |
|
|||
|
|
| `admin_rights.py` | Matrix-Query: `WHERE module IS NOT NULL` |
|
|||
|
|
|
|||
|
|
### Neues Modul anbinden (Pflicht)
|
|||
|
|
|
|||
|
|
1. Datei `rights_registrations/mein_modul.py` anlegen
|
|||
|
|
2. `register_capability` / `register_feature` aufrufen
|
|||
|
|
3. In `rights_registrations/__init__.py` importieren
|
|||
|
|
4. Endpoint: `probe_capability` + ggf. `consume_club_feature_with_usage`
|
|||
|
|
5. `capability_enforcement_audit.WIRED_PROBE` ergänzen
|
|||
|
|
|
|||
|
|
**Kein** Eintrag in `CAPABILITY_CATALOG` als Voraussetzung für DB — der Katalog wird zur **Dokumentation** der Namenskonvention, nicht zur Seed-Quelle.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. Legacy-Katalog (079)
|
|||
|
|
|
|||
|
|
- Bleibt in der DB (`module IS NULL`) für Übergang / `check_capability`-Kompatibilität
|
|||
|
|
- Erscheint **nicht** mehr in der Admin-Matrix
|
|||
|
|
- Wird nicht erweitert — neue Rechte nur über Registry
|
|||
|
|
- Langfristig: ungenutzte Seed-Zeilen deaktivieren oder archivieren
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. Aktuell registrierte Module (Start)
|
|||
|
|
|
|||
|
|
| Modul | Rechte | Kontingente |
|
|||
|
|
|-------|--------|-------------|
|
|||
|
|
| `exercises` | KI suggest/regenerate, create, media.upload | `ai_calls`, `exercises`, `exercise_media` |
|
|||
|
|
| `planning_exercise_suggest` | planning.ai.* | (nutzt `ai_calls`) |
|
|||
|
|
| `club_creation_requests` | Gründung + approve | — |
|
|||
|
|
| `platform` | admin.access, quota.bypass | — |
|
|||
|
|
|
|||
|
|
Weitere Module folgen **mit ihrer Implementierung**, nicht vorher.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. Referenzen
|
|||
|
|
|
|||
|
|
- `docs/working/RBAC_ENFORCEMENT_ROADMAP.md` — Enforcement nach Verdrahtung
|
|||
|
|
- `MEMBERSHIP_RBAC_DECISIONS_2026-06.md` — Produktentscheidungen
|
|||
|
|
- `CLUB_MEMBERSHIP_AND_FEATURES.v1.md` — Kontingent-Semantik
|
|||
|
|
|
|||
|
|
**Changelog**
|
|||
|
|
|
|||
|
|
- 2026-06-07: Registry-first als verbindliche Korrektur; Migration 084; Pilot-Registrierungen.
|