Schreibgrenzen der Freigabestufe festgehalten

Lesen war geregelt, Schreiben nicht: bisher stand nirgends, dass jemand mit
Stufe 2 keine Stufe-4-Akte anlegen darf. Ohne die Regel erzeugt man Akten, die
man selbst nicht mehr sehen kann, und umgeht die Sichtbarkeitsprüfung.

Festgehalten in docs/03-auth-und-rechte.md, als Aufgaben in Phase 2:
Klassifizierung nie über der eigenen Stufe, Ändern und Löschen nur mit
Lesezugriff, Umklassifizierung mit SYSTEM-Eintrag und AuditLog. Eine
Herabstufung ist der heikelste Vorgang im System — sie macht Inhalte für Leute
sichtbar, die sie vorher nicht sehen durften.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Harlekin
2026-09-01 21:29:36 +02:00
co-authored by Claude Opus 5
parent 9c966b471e
commit 2003a3b75f
2 changed files with 39 additions and 0 deletions
+33
View File
@@ -73,6 +73,39 @@ Kein Zugriff bedeutet:
- Ist die Stufe als `hiddenBelow` markiert: **404**, die Akte existiert für den Nutzer nicht.
- Sonst: Eintrag in Listen sichtbar, Titel und Inhalt gesperrt, Detailseite zeigt Sperrhinweis.
## Schreibende Zugriffe und die eigene Stufe
Die Abschnitte oben regeln das Lesen. Fürs Schreiben gilt zusätzlich:
**Niemand legt eine Akte über der eigenen Freigabestufe an.** Wer Stufe 2 hat, legt Akten bis
Stufe 2 an, nicht bis Stufe 4. Sonst erzeugt man Akten, die man selbst nicht mehr sehen kann,
und umgeht nebenbei die Sichtbarkeitsregel.
**Ändern und Löschen setzt Lesezugriff voraus.** Was jemand nicht sehen darf, darf er nicht
anfassen — auch nicht über einen direkten Aufruf der Server Action. Die Prüfung ist dieselbe
wie beim Lesen (`visibleCaseWhere`), plus das nötige Recht.
**Die Klassifizierung ist nachträglich änderbar**, mit denselben Grenzen:
- die neue Stufe darf die eigene Stufe nicht übersteigen
- die Akte muss vorher lesbar gewesen sein
- es braucht das Recht `case.edit`
- die Änderung erzeugt einen `SYSTEM`-Eintrag im Verlauf **und** einen `AuditLog`-Eintrag mit
alter und neuer Stufe. Eine Herabstufung ist der heikelste Vorgang im ganzen System:
sie macht Inhalte für Leute sichtbar, die sie vorher nicht sehen durften, und muss deshalb
ohne Nachfragen nachvollziehbar sein.
Für Abschnitte und Verlaufseinträge gilt dasselbe eine Ebene tiefer: `minClearance` lässt sich
nicht über die eigene Stufe heben, und eine Erhöhung wirkt rückwirkend auf alle Versionen
(siehe `docs/05-akten-und-vorlagen.md`).
**Ausnahmsweiser Zugang** läuft über `CaseParticipant`: wer als Beteiligter eingetragen ist,
liest die Akte unabhängig von seiner Stufe. Das ist der vorgesehene Weg, jemanden gezielt
hinzuzuziehen, ohne ihm allgemein eine höhere Stufe zu geben. Beteiligte hinzuzufügen setzt
`case.edit` voraus und wird protokolliert.
Die Gegenprobe bleibt der `CaseExclusion`: er schlägt jede Stufe und auch den Admin.
## Umsetzung in Prisma
Die Prüfung wird nie in JavaScript nachgelagert. `lib/access/caseFilter.ts` liefert ein