Verweise auf fremde Akten: Zugehörigkeitsprüfung in allen Server Actions durchgehen #23
Notifications
Total Time Spent: 1 hour 41 minutes
florian.wilde
1 hour 41 minutes
No due date set.
Dependencies
No dependencies set.
Reference: florian.wilde/betreuungs-cockpit#23
Reference in New Issue
Block a user
Problem
Wenn ein Formular einen anderen Datensatz verknüpft (Konto, Vertrag,
Immobilie, Kontakt, Dokument), muss die Server Action prüfen, ob dieser
Datensatz zur selben betreuten Person gehört. An mehreren Stellen fehlte
diese Prüfung.
Gefunden und bereits behoben wurde sie bei:
kontoIdwurde geprüft,vertragIdundimmobilieIdnicht (Issue #8)vertragIdungeprüft (Issue #8)(Issue #9)
Das waren aber nur die Stellen, die mir beim Arbeiten an anderen Aufgaben
vor die Füße gefallen sind. Ein systematischer Durchgang steht aus.
Warum das zählt
Solange nur eine betreute Person angelegt ist, ist es folgenlos. Sobald
es zwei sind, kann ein manipuliertes Formular eine Verknüpfung über
Aktengrenzen hinweg anlegen — und dann steht etwa der Rückkaufswert der
einen Akte am Vertrag der anderen, oder ein fremder Name im Briefkopf.
Was ich will
src/server/actions/daraufhin durchsehen,ob jeder Fremdschlüssel aus dem Formular gegen
betreuteIdgeprüftwird
abzuschreiben — dann fällt beim nächsten neuen Verweis eher auf, wenn
sie fehlt
Akzeptanzkriterien
geprüft, bevor er gespeichert wird
eine fremde Akte abweist
Person"), statt zu werfen
Hinweis
Keine Migration. Sicherheitsnaher Aufräumpunkt.
Angelegt auf Zuruf im Chat, nicht aus dem Dashboard — bitte in Nebula
nachtragen.
🚀 Umgesetzt und nach
mainübernommen.d75eb18Der Durchgang — alle 22 Dateien unter
src/server/actions/Das Ergebnis ist besser als befürchtet: Bis auf eine Stelle war jeder Verweis geprüft.
kontoId,belegId,vertragIdvorgangIdvorgangIdDie gemeinsame Stelle:
src/lib/auth/verweise.ts. Die acht erlaubten Ziele sind eine ausgeschriebene Aufzählung statt eines dynamischen Tabellenzugriffs — so sieht der Typprüfer jede Abfrage, und welche Tabellen erreichbar sind, ist eine Entscheidung und keine Nebenwirkung. Mehrere Verweise werden nebeneinander geprüft.Umgestellt: die vier Einzelprüfungen der Buchung, die drei des Vermögenspostens, die eigene Hilfsfunktion für den Ansprechpartner. Bewusst nicht angefasst: Stellen mit eigener, passenderer Form — etwa das Kontaktprotokoll, das beide Verweise parallel lädt und feldgenaue Meldungen liefert.
So prüfst du es
git switch main && git pull && npm run devErwartet: „Dieser Kontakt gehört nicht zu dieser betreuten Person." — und keine Verknüpfung in der Datenbank.
npx playwright test e2e/fremdakte.spec.ts— deckt beides ab.Zwei Dinge, die ich falsch angefangen hatte
fetchnach. Der wäre auch ohne jede Prüfung grün gewesen, weil Next einen Aufruf ohne gültige Action-Id ohnehin ablehnt — er hätte nichts bewiesen. Ersetzt durch den Weg über das echte Formular; die Gegenprobe mit ausgebauter Prüfung bestätigt, dass er anschlägt.Zur Testsuite, in Klartext: Der volle Lauf meldete zunächst 6 Fehlschläge von 137, ein zweiter 3, ein dritter 0. Alle waren Zeitüberschreitungen beim ersten Aufruf einer Route (15–25 s Übersetzungszeit je Route laut Log; warm antwortet dieselbe Seite in 0,3 s), keiner ein falsches Ergebnis, und alle in Bereichen, die diese Änderung nicht berührt.
655 Unit-Tests grün, Typecheck und Lint sauber. Weder Changelog noch Version — sichtbar ändert sich nichts.