Sicherheit & Rollen
Row-Level-Security (RLS)
Abschnitt betitelt „Row-Level-Security (RLS)“Jede Tabelle mit Familieninhalten ist über RLS abgesichert: Ein Nutzer
sieht und ändert nur Zeilen seiner eigenen Familien. Aus Performance-Gründen
ist die Nutzerprüfung in den Policies gewrappt ((select auth.uid())), damit
sie pro Abfrage einmal statt pro Zeile ausgewertet wird.
Private Realtime-Kanäle
Abschnitt betitelt „Private Realtime-Kanäle“Echtzeit läuft über private Kanäle mit RLS auf realtime.messages — so kann
kein Inhalt über Familiengrenzen hinweg mitgelesen werden. Siehe
Echtzeit & Chat.
Rollenmodell
Abschnitt betitelt „Rollenmodell“Zwei klar getrennte Ebenen:
- Globaler Administrator — Flag
users.is_admin, für die App-Verwaltung. - Pro-Familie-Rolle —
family_members.role_id(z. B. Familienmanager, Kind), regelt Rechte innerhalb einer Familie.
Beide Ebenen sind gegen Privilege-Escalation geschützt: Eine serverseitige Prüfung verhindert u. a., dass ein Familienmitglied sich selbst eine Owner-/Admin-Rolle zuschiebt.
Gehärtete Datenbankfunktionen
Abschnitt betitelt „Gehärtete Datenbankfunktionen“SECURITY DEFINER-Funktionen sind gegen Aufruf durch anon/public gesperrt
(REVOKE) und nur für authenticated freigegeben — mit gezielten Ausnahmen
(z. B. die Anzeige einer Einladung vor dem Login). Schreibende Spalten sind
zusätzlich auf der DB-Ebene gesperrt.
Backups
Abschnitt betitelt „Backups“Die Datenbank wird 6×/Tag automatisch per GitHub Action gesichert und nach Cloudflare R2 (EU) geschrieben. Ein zweiter Workflow verifiziert die Sicherung. Alte Sicherungen werden per R2-Lifecycle-Regel nach 30 Tagen automatisch gelöscht (Einstellung am Bucket) — so bleibt der Speicher dauerhaft im kostenlosen Kontingent, ohne dass sich Dumps unbegrenzt ansammeln.