canon

Rechte und Protokoll

Mandantentrennung, Hoheit und Protokoll in der Datenbank, für alle Produkte gleich.

Mandantentrennung

Mandant ist die Schule (einrichtung). Jede Tabelle mit Fachdaten hat Row-Level Security, und die Datenbankrollen der Produkte können sie nicht umgehen. Jede Anfrage läuft in einer Transaktion mit einem Kontext: angemeldete Person, ihre Schulen, ihre Rollen. Ohne Kontext liefern Fachtabellen keine Zeile.

Der Kontext entsteht ausschließlich aus den Mitgliedschaften der angemeldeten Person in der Datenbank, nie aus Angaben in der Anfrage und nicht aus Rollen im Anmeldetoken. Das Token sagt nur, wer sich angemeldet hat.

Jedes Produkt hat seine eigene Datenbankrolle: score_app, roster_app, timbra_app. Was eine Rolle darf, steht als Policy an den Tabellen. roster legt für die Schülerakte zusätzliche Bereichsrechte darüber (Förderung, Gesundheit, Beratung, Kinderschutz), ebenfalls als Policy.

Hoheit

kern.hoheit hält je Schule und Datenart das eine Produkt, das schreiben darf:

Bereich Inhalt mit roster ohne roster
personen Schüler, Gastschüler, Sorgeberechtigte roster score
personal Lehrkräfte und übriges Personal, Kürzel roster score
klassen Schuljahr, Zeitraum, Klasse, Zugehörigkeit roster score
unterricht Fach, Kurs, Kurs–Klasse, Lehrauftrag, Stundentafel timbra, wenn eingesetzt score
belegungen Belegung score score

Die schreibenden Policies prüfen die Hoheit in der Datenbank; welches Produkt schreibt, folgt aus der Datenbankrolle. Die Kern-API prüft zusätzlich vorher, um verständlich antworten zu können.

Datensparsamkeit für timbra

timbra_app hat keine Rechte auf Klassenzugehörigkeit, Belegung oder Stammdaten von Schülern. Anzahl je Klasse und pseudonyme Belegungen liefern eigene Funktionen. Ein Fehler in der Kern-API kann deshalb keine Schülernamen an timbra geben.

Protokoll

Das Protokoll (kern.audit_event) ist eine Hash-Kette je Schule und Monat: Jeder Eintrag enthält den Hash seines Vorgängers, Einträge lassen sich weder ändern noch löschen. Jeder Eintrag nennt das Produkt, das ihn erzeugt hat. Änderungen an Kerntabellen werden mit Schlüsseln und Feldnamen protokolliert, ohne die Werte selbst.

Ausgehende Nachrichten

Die Outbox ist gemeinsam; jedes Produkt holt nur seine eigenen Einträge ab und bestimmt selbst, welche Arten es gibt.