feat(nextcloud-status): Modul mit Statusabruf, Versionsbewertung und Kachelansicht
- 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>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
-- 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());
|
||||
Reference in New Issue
Block a user