Basis: Certvia dev@a48c5fb als Fundament für Craftvia
Unveränderter Stand von certvia/dev (a48c5fb) plus Craftvia-Spezifikation und Brandbook unter docs/craftvia/. ISMS-Module werden im Folgecommit entfernt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "AuditType" AS ENUM ('INTERNAL', 'EXTERNAL');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "AuditStatus" AS ENUM ('PLANNED', 'IN_PREPARATION', 'DONE');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "audits" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tenant_id" TEXT NOT NULL,
|
||||
"type" "AuditType" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"planned_date" TEXT,
|
||||
"scope" TEXT,
|
||||
"assessment_level" TEXT,
|
||||
"provider" TEXT,
|
||||
"auditor_user_id" TEXT,
|
||||
"status" "AuditStatus" NOT NULL DEFAULT 'PLANNED',
|
||||
"preparation_deadline" TIMESTAMP(3),
|
||||
"result" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "audits_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "audit_evidence_items" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tenant_id" TEXT NOT NULL,
|
||||
"audit_id" TEXT NOT NULL,
|
||||
"control" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"req_id" TEXT,
|
||||
"assigned_user_id" TEXT,
|
||||
"assigned_function_key" TEXT,
|
||||
"status" TEXT NOT NULL DEFAULT 'offen',
|
||||
"evidence_id" TEXT,
|
||||
"task_id" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "audit_evidence_items_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "control_descriptions" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tenant_id" TEXT NOT NULL,
|
||||
"control" TEXT NOT NULL,
|
||||
"req_id" TEXT NOT NULL,
|
||||
"draft_text" TEXT,
|
||||
"source_ref" TEXT,
|
||||
"confidence" TEXT,
|
||||
"status" TEXT NOT NULL DEFAULT 'open',
|
||||
"open_answer" TEXT,
|
||||
"updated_by_id" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "control_descriptions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audits_tenant_id_status_idx" ON "audits"("tenant_id", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_evidence_items_tenant_id_audit_id_idx" ON "audit_evidence_items"("tenant_id", "audit_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "audit_evidence_items_tenant_id_assigned_user_id_status_idx" ON "audit_evidence_items"("tenant_id", "assigned_user_id", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "control_descriptions_tenant_id_control_idx" ON "control_descriptions"("tenant_id", "control");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "control_descriptions_tenant_id_req_id_key" ON "control_descriptions"("tenant_id", "req_id");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "audit_evidence_items" ADD CONSTRAINT "audit_evidence_items_audit_id_fkey" FOREIGN KEY ("audit_id") REFERENCES "audits"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
|
||||
-- ── Tenant-Isolation (RLS) für neue Audit-Tabellen (Muster wie F-04) ──────────
|
||||
ALTER TABLE "audits" ENABLE ROW LEVEL SECURITY;
|
||||
DROP POLICY IF EXISTS tenant_isolation ON "audits";
|
||||
CREATE POLICY tenant_isolation ON "audits" USING ("tenant_id" = current_setting('app.tenant_id', true)) WITH CHECK ("tenant_id" = current_setting('app.tenant_id', true));
|
||||
ALTER TABLE "audits" FORCE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "audit_evidence_items" ENABLE ROW LEVEL SECURITY;
|
||||
DROP POLICY IF EXISTS tenant_isolation ON "audit_evidence_items";
|
||||
CREATE POLICY tenant_isolation ON "audit_evidence_items" USING ("tenant_id" = current_setting('app.tenant_id', true)) WITH CHECK ("tenant_id" = current_setting('app.tenant_id', true));
|
||||
ALTER TABLE "audit_evidence_items" FORCE ROW LEVEL SECURITY;
|
||||
ALTER TABLE "control_descriptions" ENABLE ROW LEVEL SECURITY;
|
||||
DROP POLICY IF EXISTS tenant_isolation ON "control_descriptions";
|
||||
CREATE POLICY tenant_isolation ON "control_descriptions" USING ("tenant_id" = current_setting('app.tenant_id', true)) WITH CHECK ("tenant_id" = current_setting('app.tenant_id', true));
|
||||
ALTER TABLE "control_descriptions" FORCE ROW LEVEL SECURITY;
|
||||
Reference in New Issue
Block a user