5ef7b0c6cc
- NextcloudInstance mit Zeilenschutz, Migration 20261002150000 - Bewertung (Ampel) als reine Funktion, status.php-Abruf mit Grenzen, endoflife.date-Zwischenspeicher - API: Liste mit Bewertung, Anlegen und Einzelprüfung nur mit Verwalten - Modulseite mit Kacheln, Registrierung in Seitenleiste, Marktplatz und Symbolen Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
66 lines
2.7 KiB
SQL
66 lines
2.7 KiB
SQL
-- quick-261002-k67 — Modul Nextcloud-Status.
|
|
--
|
|
-- Zweck: neue Tabelle "NextcloudInstance" fuer die vom Verwalter
|
|
-- eingetragenen Nextcloud-Clouds der Kunden (Kundenname, Adresse, optionales
|
|
-- Logo) samt zuletzt ermitteltem Zustand (Erreichbarkeit, Wartungsmodus,
|
|
-- Versionstext, Fehlerart). Der Zustand liegt direkt auf der Zeile, es gibt
|
|
-- kein Zwischenlager. Logo-Bytes liegen als BYTEA an der Zeile (hoechstens
|
|
-- 1 MiB, Pruefung im Dienst); Abfragen ausser dem Logo-Abruf waehlen sie
|
|
-- nie mit aus.
|
|
--
|
|
-- Von Hand geschrieben (Vorbild 20260923140000_proxmox_server), von Hand
|
|
-- gepflegter Kopfkommentar Pflicht bei jeder RLS-Migration in diesem Projekt.
|
|
--
|
|
-- Zeilenschutz (Pflicht — sonst schlaegt rls-coverage.spec.ts fehl): die
|
|
-- Tabelle traegt `tenantId` und `tenant_isolation_policy` OHNE
|
|
-- Benutzerdimension (`USING ("tenantId" = current_tenant_id())`) — die
|
|
-- Clouds sind gemeinsame Daten der Organisation, nicht persoenliche Daten
|
|
-- eines einzelnen Benutzers.
|
|
--
|
|
-- Zusaetzlich eine `system_read_policy` (Form aus
|
|
-- 20260914120000_rls_system_context_read): der stuendliche Hintergrunddienst
|
|
-- liest ueber `forSystem()` genau einmal je Durchlauf Kennung und Mandant
|
|
-- aller Clouds und prueft danach jede Cloud an ihren eigenen Mandanten
|
|
-- gebunden. Geschrieben wird nie im Systemkontext.
|
|
--
|
|
-- Rechte fuer die Anwendungsrolle tessera_app kommen automatisch ueber
|
|
-- ALTER DEFAULT PRIVILEGES aus 20260909130000_rls_app_role — hier nichts zu
|
|
-- tun.
|
|
--
|
|
-- WICHTIG: wie alle bisherigen RLS-Migrationen wirken diese Regeln erst,
|
|
-- wenn die Anwendung als Rolle ohne Umgehungsrecht verbindet (Schalter
|
|
-- heute AUS, siehe docs/mandantentrennung-datenbankrolle.md).
|
|
|
|
CREATE TABLE "NextcloudInstance" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"customerName" TEXT NOT NULL,
|
|
"baseUrl" TEXT NOT NULL,
|
|
"logoUrl" TEXT,
|
|
"logoData" BYTEA,
|
|
"logoMime" TEXT,
|
|
"logoVersion" INTEGER NOT NULL DEFAULT 0,
|
|
"lastCheckedAt" TIMESTAMP(3),
|
|
"reachable" BOOLEAN,
|
|
"maintenance" BOOLEAN,
|
|
"needsDbUpgrade" BOOLEAN,
|
|
"versionString" TEXT,
|
|
"edition" TEXT,
|
|
"productName" TEXT,
|
|
"errorKind" TEXT,
|
|
"errorDetail" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "NextcloudInstance_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "NextcloudInstance_tenantId_idx" ON "NextcloudInstance"("tenantId");
|
|
|
|
ALTER TABLE "NextcloudInstance" ENABLE ROW LEVEL SECURITY;
|
|
ALTER TABLE "NextcloudInstance" FORCE ROW LEVEL SECURITY;
|
|
CREATE POLICY tenant_isolation_policy ON "NextcloudInstance"
|
|
USING ("tenantId" = current_tenant_id());
|
|
CREATE POLICY system_read_policy ON "NextcloudInstance"
|
|
FOR SELECT USING (is_system_context());
|