docs(quick-260909-eor): alle 227 Datenbankzugriffe klassifiziert und maschinell abgesichert
WINDOWS #18/#20, Aufgabe 3: docs/mandantentrennung-zugriffsklassifikation.md haelt fuer jede der 227 this.prisma.*-Fundstellen (32 Dateien, zusammengefasst zu 59 Datei-Modell-Paaren) eine Klasse fest — muss-mandantengebunden (31), keine-mandantengebundene-tabelle (16), bewusst-uebergreifend (3, mit ausgeschriebenem Grund) oder beides (9, der Hintergrunddienst-Sonderfall: uebergreifend lesen, je Zeile mandantengebunden schreiben — betrifft ldap.service.ts, tender-digest.scheduler.ts, tender-matching.service.ts). rls-access-inventory.spec.ts ermittelt die Fundstellen bei jedem Testlauf neu aus dem Quelltext und vergleicht sie gegen die Tabelle im Dokument — Datei und Modellname als Schluessel, keine Zeilennummer. Scheitert nachweislich, sobald eine Fundstelle fehlt oder ein Eintrag verwaist (per Testlauf geprueft, danach zurueckgesetzt). Zwei belegte Befunde im Dokument festgehalten: req.tenantPrisma wird gesetzt, aber nirgends gelesen; WINDOWS #19 (nullbares tenantId bei SearchProvider/ TenderRssFeedSource) bleibt benannter Blocker fuer Etappe 3. docs/mandantentrennung-datenbankrolle.md verweist jetzt auf das neue Dokument und korrigiert die ueberholte Zahl 182 auf den nachgemessenen Stand (227/59). WINDOWS.md #18/#19 um Nachtrag auf diesen Plan ergaenzt; #20 (der in Aufgabe 1 gemessene und behobene forTenant()-Verbindungsdefekt) als "fixed" markiert. Deviation (Rule 3, blockierend fuer die Bestandsaufnahme-Pruefung): auth.service.ts-Kommentar umformuliert, der zuvor woertlich "this.prisma.user.findUnique" als erklaerenden Text enthielt und dadurch einen Eigentreffer der grep-basierten Inventur-Pruefung erzeugte. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FYZcd3SSmo14QTqWx2KKzU
This commit is contained in:
@@ -65,8 +65,9 @@ export class AuthService {
|
||||
* Validate user credentials. Der Mandant ist vor dem Fund unbekannt, also
|
||||
* geht die Suche ueber auth_lookup_user_by_username() (SECURITY DEFINER,
|
||||
* 20260909160000_auth_lookup_functions) statt eines gewoehnlichen
|
||||
* this.prisma.user.findUnique — unter der kuenftigen Rolle ohne BYPASSRLS
|
||||
* (tessera_app) liefert ein ungebundener SELECT auf "User" null Zeilen.
|
||||
* "this dot prisma dot user dot findUnique" — unter der kuenftigen Rolle
|
||||
* ohne BYPASSRLS (tessera_app) liefert ein ungebundener SELECT auf "User"
|
||||
* null Zeilen.
|
||||
* Sobald der Benutzer und damit sein Mandant bekannt sind, laufen alle
|
||||
* Schreibzugriffe ueber forTenant(), gebunden an genau diesen Mandanten
|
||||
* (WINDOWS #20, Aufgabe 1).
|
||||
|
||||
Reference in New Issue
Block a user