Files
nexarch/migrations/0014_object_acl.up.sql
T
patrickandClaude Sonnet 5 77a89a9fcb
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
RBAC-11: objektrechte mit vererbung für ordner
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-22 11:54:06 +02:00

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()
);