feat(module-grants): Freigabestufe Verwalten – Datenbank, Zugriffsprüfung und Kantinen-Einstellungen
- Migration: ModuleGrant.level (USE/MANAGE), Bestand bleibt USE - ModuleAccessService.getModuleAccessLevels als einzige Auflösung, MANAGE gewinnt - @ModuleManage(slug) am ModuleGuard, GET /modules/active liefert canManage - Kantinenabrechnung: Einstellungen für Benutzer mit Verwalten, Web-Hook useCanManageModule Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
-- 261002-icv — Freigabestufe fuer Modul-Freigaben: Benutzen (USE) und
|
||||
-- Verwalten (MANAGE).
|
||||
--
|
||||
-- Zweck: jede Zeile in "ModuleGrant" bekommt eine Stufe. USE ist der Bestand
|
||||
-- und der Standard (Modul oeffnen und benutzen). MANAGE erlaubt zusaetzlich,
|
||||
-- die eigenen Einstellungen dieses einen Moduls zu aendern. Freigaben
|
||||
-- erteilen, Module aktivieren und die uebrige Verwaltung bleiben
|
||||
-- Administratoren vorbehalten (das erzwingt die Anwendung, nicht diese
|
||||
-- Migration).
|
||||
--
|
||||
-- Bestandsdaten: durch den DEFAULT 'USE' werden alle vorhandenen Freigaben zu
|
||||
-- USE — niemand gewinnt durch die Migration Rechte.
|
||||
--
|
||||
-- Von Hand geschrieben (Vorbild 20261002120000_kantine_datev_config).
|
||||
--
|
||||
-- Zeilenschutz: keine neue Tabelle. Die vorhandenen Regeln auf "ModuleGrant"
|
||||
-- filtern Zeilen, nicht Spalten, und bleiben unveraendert — rls-coverage
|
||||
-- braucht nichts. PostgreSQL gewaehrt USAGE auf neue Typen automatisch an
|
||||
-- PUBLIC, die Anwendungsrolle tessera_app kann den Aufzaehlungstyp also
|
||||
-- verwenden.
|
||||
--
|
||||
-- WICHTIG: wie alle bisherigen RLS-Migrationen wirken die Zeilenregeln erst,
|
||||
-- wenn die Anwendung als Rolle ohne Umgehungsrecht verbindet (Schalter
|
||||
-- heute AUS, siehe docs/mandantentrennung-datenbankrolle.md).
|
||||
|
||||
CREATE TYPE "ModuleGrantLevel" AS ENUM ('USE', 'MANAGE');
|
||||
|
||||
ALTER TABLE "ModuleGrant" ADD COLUMN "level" "ModuleGrantLevel" NOT NULL DEFAULT 'USE';
|
||||
@@ -140,12 +140,20 @@ model TenantModuleActivation {
|
||||
// darf höchstens eine Gruppe die Standard-Markierung tragen, DB-erzwungen
|
||||
// über einen partiellen Unique-Index in der Hand-SQL-Ergänzung dieser
|
||||
// Migration (Prisma 6.19 kennt keine partiellen Indizes ohne Preview-Flag).
|
||||
// D-04: ModuleGrant trägt bewusst KEIN Rechtestufen-Feld — nur Zugriff an/aus.
|
||||
// D-04 (überholt durch 261002-icv): ModuleGrant trägt seit 261002-icv die Freigabestufe `level`.
|
||||
enum MembershipSource {
|
||||
MANUAL
|
||||
LDAP
|
||||
}
|
||||
|
||||
// 261002-icv: Freigabestufe einer Modul-Freigabe. USE = Benutzen (Standard und
|
||||
// Bestand), MANAGE = Verwalten (Modul benutzen UND dessen eigene Einstellungen
|
||||
// ändern). Freigaben erteilen bleibt Administratoren vorbehalten.
|
||||
enum ModuleGrantLevel {
|
||||
USE
|
||||
MANAGE
|
||||
}
|
||||
|
||||
model Group {
|
||||
id String @id @default(uuid())
|
||||
tenantId String
|
||||
@@ -191,6 +199,10 @@ model ModuleGrant {
|
||||
userId String?
|
||||
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
|
||||
createdAt DateTime @default(now())
|
||||
// 261002-icv: Freigabestufe; USE = Benutzen (Standard und Bestand),
|
||||
// MANAGE = Verwalten — Modul benutzen und dessen eigene Einstellungen
|
||||
// ändern; Freigaben erteilen bleibt Administratoren vorbehalten.
|
||||
level ModuleGrantLevel @default(USE)
|
||||
|
||||
// Entweder-oder (Gruppe XOR Benutzer, D-04) + Duplikat-Schutz je Variante
|
||||
// werden per hand-editierter migration.sql ergänzt — Prisma 6.19 hat kein
|
||||
|
||||
Reference in New Issue
Block a user