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:
co-authored by
Claude Opus 5
parent
9c966b471e
commit
2003a3b75f
@@ -45,6 +45,12 @@ Das ist der schwierigste Teil. Wenn er steht, ist der Rest Formularbau.
|
|||||||
- [ ] Aktenansicht: Kopfdaten sofort, Verlauf und Chat in eigenen Suspense-Grenzen
|
- [ ] Aktenansicht: Kopfdaten sofort, Verlauf und Chat in eigenen Suspense-Grenzen
|
||||||
- [ ] Vermerk anlegen, optimistisch, mit clientseitiger UUIDv7
|
- [ ] Vermerk anlegen, optimistisch, mit clientseitiger UUIDv7
|
||||||
- [ ] Statusübergänge mit Rechteprüfung und automatischem Systemeintrag
|
- [ ] Statusübergänge mit Rechteprüfung und automatischem Systemeintrag
|
||||||
|
- [ ] Schreibgrenzen nach `docs/03-auth-und-rechte.md`: keine Akte über der eigenen Stufe
|
||||||
|
anlegen, Ändern und Löschen nur mit Lesezugriff, Klassifizierung nachträglich änderbar
|
||||||
|
bis zur eigenen Stufe
|
||||||
|
- [ ] Umklassifizierung erzeugt `SYSTEM`-Eintrag und `AuditLog` mit alter und neuer Stufe
|
||||||
|
- [ ] Negativtests dazu: Stufe 2 kann keine Stufe-4-Akte anlegen, nicht ändern, nicht
|
||||||
|
hochstufen, auch nicht über einen direkten Aufruf der Server Action
|
||||||
- [ ] Audit-Log für alle schreibenden Aktionen und Lesezugriffe ab Stufe 3
|
- [ ] Audit-Log für alle schreibenden Aktionen und Lesezugriffe ab Stufe 3
|
||||||
- [ ] Nachträgliche Änderungen an Verlaufseinträgen nach `docs/05-akten-und-vorlagen.md`:
|
- [ ] Nachträgliche Änderungen an Verlaufseinträgen nach `docs/05-akten-und-vorlagen.md`:
|
||||||
`CaseEntryVersion`, Karenzzeit, Pflichtbegründung, `bearbeitet · vN` mit Diff-Historie
|
`CaseEntryVersion`, Karenzzeit, Pflichtbegründung, `bearbeitet · vN` mit Diff-Historie
|
||||||
|
|||||||
@@ -73,6 +73,39 @@ Kein Zugriff bedeutet:
|
|||||||
- Ist die Stufe als `hiddenBelow` markiert: **404**, die Akte existiert für den Nutzer nicht.
|
- 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.
|
- 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
|
## Umsetzung in Prisma
|
||||||
|
|
||||||
Die Prüfung wird nie in JavaScript nachgelagert. `lib/access/caseFilter.ts` liefert ein
|
Die Prüfung wird nie in JavaScript nachgelagert. `lib/access/caseFilter.ts` liefert ein
|
||||||
|
|||||||
Reference in New Issue
Block a user