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.