CI / Web-Barrierefreiheitspruefung (axe, Tastatur, Reflow, Textabstaende) (push) Canceled after 0s
CI / Web (shl) (push) Canceled after 0s
CI / Web (pdf-viewer) (push) Canceled after 0s
CI / Core-Modul (Build/Vet/Test) (push) Canceled after 0s
CI / DMS Security-Test-Gate (AC5, Merge-Gate) (push) Canceled after 0s
CI / DMS-Modul (Lint/Build/Test/Coverage/Artefakt) (push) Canceled after 0s
CI / DMS-Modul Supply-Chain-Scan (govulncheck) (push) Canceled after 0s
CI / Web (dms-browser) (push) Canceled after 0s
Supply-Chain-Scan (Go) / govulncheck (push) Canceled after 0s
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
46 lines
2.0 KiB
SQL
46 lines
2.0 KiB
SQL
-- RBAC-11: Objektrechte mit Vererbung fuer Ordner/Dokumente. Liegt wie
|
|
-- policy_rules/feature_flags in der Registry-DB (tenant_slug-Spalte statt
|
|
-- eigener Tenant-Datenbank), weil policy-api nur einen einzigen Pool haelt
|
|
-- (NEXARCH_POLICY_ADMIN_DSN) und ueber genau diesen bestehenden Endpunkt
|
|
-- bedient werden soll (Akzeptanzkriterium 3).
|
|
|
|
CREATE TABLE object_acl (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
tenant_slug TEXT NOT NULL,
|
|
object_type TEXT NOT NULL CHECK (object_type IN ('folder', 'document')),
|
|
object_id TEXT NOT NULL,
|
|
principal_type TEXT NOT NULL CHECK (principal_type IN ('user', 'group')),
|
|
principal_id TEXT NOT NULL,
|
|
object_right TEXT NOT NULL CHECK (object_right IN ('read', 'write', 'manage')),
|
|
effect TEXT NOT NULL CHECK (effect IN ('allow', 'deny')),
|
|
created_by TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
UNIQUE (tenant_slug, object_type, object_id, principal_type, principal_id, object_right)
|
|
);
|
|
|
|
CREATE INDEX object_acl_lookup_idx ON object_acl (tenant_slug, object_type, object_id);
|
|
|
|
-- Vererbungsunterbrechung: ein Eintrag fuer einen Ordner bedeutet, dass
|
|
-- Eintraege von Vorfahren dieses Ordners fuer ihn und seinen Teilbaum nicht
|
|
-- mehr gelten (Akzeptanzkriterium 2). Nur Ordner koennen die Vererbung
|
|
-- unterbrechen, nicht Dokumente (Dokumente haben keine Kinder).
|
|
CREATE TABLE object_acl_breaks (
|
|
tenant_slug TEXT NOT NULL,
|
|
folder_id TEXT NOT NULL,
|
|
created_by TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
PRIMARY KEY (tenant_slug, folder_id)
|
|
);
|
|
|
|
-- Aenderungshistorie fuer das Audit-Log (Akzeptanzkriterium 3).
|
|
CREATE TABLE object_acl_changes (
|
|
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
|
|
tenant_slug TEXT NOT NULL,
|
|
object_type TEXT NOT NULL,
|
|
object_id TEXT NOT NULL,
|
|
action TEXT NOT NULL,
|
|
detail TEXT NOT NULL DEFAULT '',
|
|
actor TEXT NOT NULL,
|
|
changed_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
);
|