Files
tessera-ctl/.planning/phases/15-modul-berechtigungen-gruppen-user-grants/15-DISCUSSION-LOG.md
T

265 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 15: Modul-Berechtigungen: Gruppen & User-Grants - Discussion Log
> **Audit trail only.** Do not use as input to planning, research, or execution agents.
> Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
**Date:** 2026-08-04
**Phase:** 15-modul-berechtigungen-gruppen-user-grants
**Areas discussed:** Grundsatzentscheidungen (vor Roadmap-Eintrag), Sperr-Verhalten im Portal, Standard-Zuweisungen, Admin-UI Ort & Form, AD-Bindung & Sync-Semantik, Nachfragen (Widgets, Löschen, Protokoll)
---
## Grundsatzentscheidungen (vor dem Roadmap-Eintrag geklärt)
### Herkunft der Gruppen
| Option | Description | Selected |
|--------|-------------|----------|
| Beides: Tessera-Gruppen mit optionaler AD-Bindung | Group-Model mit manuellen Mitgliedern, optional ldapDn — deckt Mandanten mit und ohne AD ab | ✓ |
| Nur Tessera-eigene Gruppen | Ausschließlich im Admin-UI gepflegt, kein memberOf-Sync | |
| Nur AD-Gruppen | Gruppen 1:1 aus dem AD, kein manuelles Anlegen | |
**User's choice:** Tessera-Gruppen mit optionaler AD-Bindung
### Default ohne Freigabe
| Option | Description | Selected |
|--------|-------------|----------|
| Offen, Einschränkung pro Modul aktivierbar | Ohne Grants sehen alle Nutzer des Mandanten das Modul (heutiges Verhalten) | |
| Geschlossen — Freigabe immer nötig | Tenant-Aktivierung ist nur Voraussetzung, jeder User braucht Grant | ✓ |
**User's choice:** Geschlossen
**Notes:** Lockout-Risiko wurde benannt; die Migration mit Gruppe „Alle Benutzer" wurde als Gegenmaßnahme vereinbart.
### Admin-Bypass
| Option | Description | Selected |
|--------|-------------|----------|
| ADMIN + SUPER_ADMIN sehen alles Aktive | Admins umgehen Grants im eigenen Mandanten | ✓ |
| Nur SUPER_ADMIN umgeht | Mandanten-Admins unterliegen selbst den Grants | |
| Niemand umgeht | Grants gelten für alle | |
**User's choice:** ADMIN + SUPER_ADMIN
### Tiefe der Berechtigung
| Option | Description | Selected |
|--------|-------------|----------|
| Nur Modul-Zugriff (an/aus) | Grant entscheidet nur über Sichtbarkeit und API-Nutzung | ✓ |
| Zugriff + Rechtestufen pro Modul | Zusätzlich read/write/admin je Grant, von jedem Modul auszuwerten | |
**User's choice:** Nur Zugriff an/aus
---
## Sperr-Verhalten im Portal
### Direktaufruf einer nicht freigegebenen Modul-URL
| Option | Description | Selected |
|--------|-------------|----------|
| 403-Seite mit Hinweis | „Kein Zugriff — wende dich an deinen Administrator" | ✓ |
| Weiterleitung aufs Dashboard | Stiller Redirect ohne Meldung | |
| 404 — Existenz verbergen | Verrät nichts über vorhandene Module, erschwert Support | |
**User's choice:** 403-Seite mit Hinweis
### Sichtbarkeit im Marketplace
| Option | Description | Selected |
|--------|-------------|----------|
| Sichtbar mit Badge „Kein Zugriff" | Katalog bleibt vollständig, gesperrte Module gekennzeichnet | ✓ |
| Komplett ausblenden | Marketplace zeigt nur Nutzbares | |
| Nur für Admins gefiltert | Gleiche Filterung wie Sidebar, ohne Sonderdarstellung | |
**User's choice:** Sichtbar mit Badge
### Wirksamkeit eines Entzugs bei aktiver Session
| Option | Description | Selected |
|--------|-------------|----------|
| Beim nächsten Seitenaufruf | API sperrt sofort, Sidebar zieht beim Laden nach | ✓ |
| Sidebar pollt regelmäßig | Entzug wird ohne Reload sichtbar, kostet Extra-Last | |
**User's choice:** Beim nächsten Seitenaufruf
---
## Standard-Zuweisungen
### Freigabe-Default beim Aktivieren eines Moduls
| Option | Description | Selected |
|--------|-------------|----------|
| Automatisch für „Alle Benutzer" | Aktivieren genügt, Einschränkung nachträglich | |
| Zunächst niemand außer Admins | Jede Freigabe ist ein bewusster zweiter Schritt | |
| Admin wird beim Aktivieren gefragt | Dialog: sofort freigeben oder erst konfigurieren | ✓ |
**User's choice:** Dialog beim Aktivieren
**Notes:** Der bisher einfache Aktiv-Toggle in /admin/modules bekommt damit eine Rückfrage.
### Neu angelegter Benutzer
| Option | Description | Selected |
|--------|-------------|----------|
| Ja, automatisch in die Standardgruppe | Neue Benutzer sofort arbeitsfähig | ✓ |
| Nein, ohne Gruppe starten | Admin weist bewusst zu | |
| Checkbox im Anlegen-Formular | Vorbelegt auf ja, abwählbar | |
**User's choice:** Automatisch
### Per LDAP importierter Benutzer
| Option | Description | Selected |
|--------|-------------|----------|
| Genauso wie manuell angelegte | Eine Regel für beide Herkünfte | ✓ |
| Nur über AD-gebundene Gruppen | Ausschließlich Mitgliedschaften aus dem AD | |
**User's choice:** Genauso wie manuell angelegte
### Status der Gruppe „Alle Benutzer"
| Option | Description | Selected |
|--------|-------------|----------|
| Geschützte Systemgruppe | Nicht löschbar, nicht umbenennbar | |
| Ganz normale Gruppe | Frei bearbeitbar, umbenennbar, löschbar | ✓ |
**User's choice:** Normale Gruppe
**Notes:** Diese Wahl warf die Folgefrage auf, wie der Automatismus aus D-11/D-12 sein Ziel findet — beantwortet über die Markierung „Standardgruppe" (D-13).
---
## Admin-UI: Ort & Form
### Ort der Gruppenverwaltung
| Option | Description | Selected |
|--------|-------------|----------|
| Eigener Punkt /admin/groups | Sechster Eintrag neben den bestehenden Admin-Seiten | ✓ |
| Als Tab in /admin/users | Benutzer und Gruppen auf einer Seite | |
**User's choice:** Eigener Punkt /admin/groups
### Ort der Freigabe-Matrix
| Option | Description | Selected |
|--------|-------------|----------|
| Eigene Matrix-Seite | Tabelle Module × Gruppen, gesamter Stand auf einen Blick | ✓ |
| Pro Modul in /admin/modules | Aufklappbare Freigabeliste je Modul | |
| Pro Gruppe in der Gruppenverwaltung | Modulliste zum Ankreuzen je Gruppe | |
**User's choice:** Eigene Matrix-Seite
### Einzel-Freigaben für Benutzer
| Option | Description | Selected |
|--------|-------------|----------|
| Beim Benutzer in /admin/users | Sektion „Zusätzliche Modulfreigaben" plus geerbte Rechte | ✓ |
| In derselben Matrix wie Gruppen | Benutzer als zusätzliche Spalten | |
| Nur über Gruppen — keine Einzelfreigaben | Reduktion des Phasenziels | |
**User's choice:** Beim Benutzer in /admin/users
### Ziel des Auto-Beitritts
| Option | Description | Selected |
|--------|-------------|----------|
| Markierung „Standardgruppe" | Genau eine Gruppe pro Mandant, umhängbar und abschaltbar | ✓ |
| Fest an den Namen „Alle Benutzer" gebunden | Bricht still beim Umbenennen | |
| Gar kein Automatismus | Widerspricht D-11/D-12 | |
**User's choice:** Markierung „Standardgruppe"
---
## AD-Bindung & Sync-Semantik
### Auswahl der AD-Gruppe
| Option | Description | Selected |
|--------|-------------|----------|
| Aus dem AD browsen | Bestehende Gruppensuche im LDAP-Service wiederverwenden | ✓ |
| DN manuell eintippen | Einfaches Textfeld, verlangt exakte DN-Kenntnis | |
| Browsen mit manueller Korrektur | Liste plus editierbares Feld | |
**User's choice:** Aus dem AD browsen
### Benutzer verlässt die AD-Gruppe
| Option | Description | Selected |
|--------|-------------|----------|
| Mitgliedschaft entfernen | Nur die LDAP-Mitgliedschaft fällt weg, manuelle bleiben | ✓ |
| Behalten und markieren | Bleibt bestehen, wird als „nicht mehr im AD" gekennzeichnet | |
**User's choice:** Mitgliedschaft entfernen
### Manuelle Mitglieder in gebundenen Gruppen
| Option | Description | Selected |
|--------|-------------|----------|
| Ja, beide Quellen nebeneinander | Mitgliedschaft merkt sich Herkunft MANUAL/LDAP | ✓ |
| Nein, gebundene Gruppen sind reine AD-Spiegel | Jede Ausnahme braucht eine zweite Gruppe | |
**User's choice:** Beide Quellen nebeneinander
### Zeitpunkt des Gruppen-Syncs
| Option | Description | Selected |
|--------|-------------|----------|
| Immer mit dem Benutzer-Sync | memberOf im selben Durchlauf, ein Vorgang | ✓ |
| Eigener Gruppen-Sync-Button | Getrennte Auslösung, zwei Stände | |
**User's choice:** Immer mit dem Benutzer-Sync
---
## Nachfragen: Widgets, Löschen, Protokoll
### Widgets gesperrter Module
| Option | Description | Selected |
|--------|-------------|----------|
| Nein — außerhalb dieser Phase | Widgets sind heute modulunabhängig, Zuordnung wäre neue Fähigkeit | |
| Ja — Zuordnung mitbauen | Widget-Typen bekommen Modul-Bezug, gesperrte Widgets verschwinden | ✓ |
**User's choice:** Zuordnung mitbauen
**Notes:** Erweitert die Phase gegenüber den ursprünglichen sechs Success Criteria der Roadmap um Schema, Migration und Dashboard-Logik.
### Löschen einer belegten Gruppe
| Option | Description | Selected |
|--------|-------------|----------|
| Warnung mit Zahlen, dann kaskadieren | Dialog nennt Mitglieder- und Freigabenanzahl | ✓ |
| Kommentarlos kaskadieren | Ohne Rückfrage | |
| Löschen sperren, solange belegt | Gruppe muss erst geleert werden | |
**User's choice:** Warnung mit Zahlen, dann kaskadieren
### Protokollierung von Freigabeänderungen
| Option | Description | Selected |
|--------|-------------|----------|
| Ja, in der Datenbank mit Anzeige | Eigene Tabelle, im Admin-UI einsehbar | |
| Nur ins Server-Log | Kein DB-Eintrag, keine UI-Ansicht | ✓ |
| Vorerst gar nicht | Kein Protokoll in dieser Phase | |
**User's choice:** Nur ins Server-Log
---
## Claude's Discretion
- Schema-Details der neuen Modelle (Feldnamen, Indizes, Kaskaden, Erzwingung der Entweder-oder-Beziehung bei ModuleGrant)
- Aufbau und Ort der Zugriffsauflösung im NestJS-Code, inklusive etwaigem Request-Caching
- Migrationstechnik: Prisma-Migration mit Datenschritt oder separates Seed-Skript
- Darstellung der Matrix bei vielen Modulen und Gruppen
- Namensraum und Schnitt der i18n-Keys
- Mechanik der Widget-Typ-→-Modul-Zuordnung (statische Registrierung oder DB-Feld)
## Deferred Ideas
- Rechtestufen innerhalb eines Moduls (read/write/admin pro Grant)
- Self-Service „Zugriff anfragen" aus dem Marketplace inklusive Genehmigungsfluss
- Audit-Trail für Berechtigungsänderungen in der Datenbank mit Ansicht im Admin-UI
- Mehrfach-Mandantenzugehörigkeit eines Benutzers (offen seit Phase 2, D-09)