From 0645cac6187508b31b101199e8bc5cb6224dad82 Mon Sep 17 00:00:00 2001 From: Schalli Date: Mon, 7 Sep 2026 10:40:48 +0200 Subject: [PATCH] =?UTF-8?q?docs(15):=20WINDOWS=20#10=20geschlossen=20?= =?UTF-8?q?=E2=80=94=20Browser-Gegenprobe=20nach=20dem=20Fix=20bestanden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Der am Vormittag gefundene Zugriffs-Guard-Defekt ist behoben (260907-e8k) und im echten Browser gegen ein frisch gebautes Web-Image nachgeprueft. nutzer2 ohne Freigabe bekommt jetzt auf /modules/tender-radar, dessen Unterseiten my-sources und settings sowie auf /modules/dkv-fleet die 403-Seite als Serverantwort. Auf /modules/cert-manager, wo er eine Freigabe hat, kommt er weiterhin durch — das ist die Gegenprobe dagegen, dass die Sperre zu weit greift. admin sieht alle vier Adressen unveraendert, nutzer1 sieht Meine Quellen mit allen drei Abschnitten; die Phase-17-Funktion ist unbeschaedigt. Im Bericht zusaetzlich festgehalten, dass ein erster Messversuch per fetch() aus der laufenden Seite heraus faelschlich alle Seiten als gesperrt meldete, auch fuer den Administrator. Der Aufruf fuehrt die Sitzung nicht wie eine echte Navigation mit. Alle berichteten Zahlen stammen aus echten Seitenaufrufen. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01K5jtbGzC5Sf9npJ3JCjKhq --- .planning/WINDOWS.md | 12 +++--- .../15-UAT-2026-09-07.md | 38 +++++++++++++++--- .../w10-fix-my-sources-gesperrt.png | Bin 0 -> 34507 bytes 3 files changed, 38 insertions(+), 12 deletions(-) create mode 100644 .planning/phases/15-modul-berechtigungen-gruppen-user-grants/uat-2026-09-07/w10-fix-my-sources-gesperrt.png diff --git a/.planning/WINDOWS.md b/.planning/WINDOWS.md index 514c0f2..dc2d267 100644 --- a/.planning/WINDOWS.md +++ b/.planning/WINDOWS.md @@ -1,10 +1,10 @@ --- schema_version: 1 -open_count: 5 +open_count: 4 waived_count: 0 -fixed_count: 7 +fixed_count: 8 total_count: 12 -last_updated: 2026-09-07T08:09:04.406Z +last_updated: 2026-09-07T08:40:04.951Z --- # Broken Windows Ledger @@ -24,7 +24,7 @@ last_updated: 2026-09-07T08:09:04.406Z | 7 | 17 | unrun-verify | .planning/phases/17-eigene-ausschreibungs-quellen-je-nutzer/17-01-PLAN.md | | 17-01 Task 2 human-check: Browser-Gegenprobe (normaler Nutzer oeffnet /modules/tender-radar/my-sources, speichert Postfach, zweites Konto desselben Mandanten sieht leeres Formular) nicht ausgefuehrt — kein Browser-Tool in dieser Session verfuegbar. Automatisierte Pruefungen (prisma validate/migrate status, Index-Liste, beide Typpruefungen, 335/335 src/tenders-Tests) sind gelaufen und gruen. | fixed | | 2026-08-12T09:24:35.289Z | 2026-09-07T07:50:56.468Z | | 8 | 17 | unrun-verify | apps/web/src/app/(portal)/modules/tender-radar/my-sources/page.tsx | | Browser-Gegenprobe Plan 17-03 Task 1 (Tracer-Feedback-Gate): Meine Quellen mit drei Abschnitten, neu angelegter eigener Feed sofort sichtbar, plattformweiter Feed ohne Entfernen-Knopf, Digest-Intervall speichert nach Reload — kein Browser-Tool in dieser Sitzung verfuegbar | fixed | | 2026-08-12T10:02:49.122Z | 2026-09-07T07:50:56.693Z | | 9 | 17 | unrun-verify | apps/web/src/app/(portal)/modules/tender-radar/settings/page.tsx | | Browser-Gegenprobe Plan 17-03 Task 2: USER-Konto sieht keine Bedienelemente auf /settings (nur Hinweis+Verweis), ADMIN-Konto sieht Abrufintervall+plattformweite Feeds ohne Postfach/Benachrichtigung, Zahnrad fuehrt in beiden Faellen nach Meine Quellen — kein Browser-Tool in dieser Sitzung verfuegbar | fixed | | 2026-08-12T10:02:49.291Z | 2026-09-07T07:50:56.910Z | -| 10 | 15 | unmet-truth | apps/web/src/app/(portal)/modules/tender-radar/page.tsx | | PERM-04 greift nicht auf modul-eigenen Routen: der Zugriffs-Guard sitzt nur in modules/[category]/[moduleSlug]/page.tsx. Die vier fest verdrahteten Modulrouten (tender-radar, dkv-fleet, cert-manager, domaincheck) samt Unterseiten (z.B. tender-radar/my-sources) laufen daran vorbei und rendern fuer einen USER OHNE Modulfreigabe vollstaendig, inklusive bedienbarer Knoepfe. Im Browser gemessen am 2026-09-07 mit nutzer2 (keine Freigabe): /modules/procurement/tender-radar zeigt korrekt die 403-Seite, /modules/tender-radar und /modules/tender-radar/my-sources und /modules/dkv-fleet zeigen die volle Seite. Keine Datenpreisgabe - die API antwortet auf allen Endpunkten mit 403 - aber der Nutzer sieht Bedienelemente, die er nicht benutzen darf, und bekommt rohe englische Techniktexte statt einer verstaendlichen Meldung. Beleg: .planning/phases/17-eigene-ausschreibungs-quellen-je-nutzer/uat-2026-09-07/befund-modul-eigene-route-ohne-freigabe.png | open | | 2026-09-07T08:03:45.978Z | | +| 10 | 15 | unmet-truth | apps/web/src/app/(portal)/modules/tender-radar/page.tsx | | PERM-04 greift nicht auf modul-eigenen Routen: der Zugriffs-Guard sitzt nur in modules/[category]/[moduleSlug]/page.tsx. Die vier fest verdrahteten Modulrouten (tender-radar, dkv-fleet, cert-manager, domaincheck) samt Unterseiten (z.B. tender-radar/my-sources) laufen daran vorbei und rendern fuer einen USER OHNE Modulfreigabe vollstaendig, inklusive bedienbarer Knoepfe. Im Browser gemessen am 2026-09-07 mit nutzer2 (keine Freigabe): /modules/procurement/tender-radar zeigt korrekt die 403-Seite, /modules/tender-radar und /modules/tender-radar/my-sources und /modules/dkv-fleet zeigen die volle Seite. Keine Datenpreisgabe - die API antwortet auf allen Endpunkten mit 403 - aber der Nutzer sieht Bedienelemente, die er nicht benutzen darf, und bekommt rohe englische Techniktexte statt einer verstaendlichen Meldung. Beleg: .planning/phases/17-eigene-ausschreibungs-quellen-je-nutzer/uat-2026-09-07/befund-modul-eigene-route-ohne-freigabe.png | fixed | | 2026-09-07T08:03:45.978Z | 2026-09-07T08:40:04.951Z | | 11 | 13 | unmet-truth | apps/api/src/tenders/tender-fingerprint.ts | | Cross-Source-Dedup kollabiert die Mehrzahl echter Duplikate nicht: tenderFingerprint() haengt [buyerName, title, cpvDivisionKey, deadlineKey, valueBucket] zu einem String und hasht ihn. Die Scraper-Adapter liefern cpvDivisions immer leer, DOE dagegen meist gefuellt - dieselbe Ausschreibung ergibt aus beiden Quellen verschiedene Fingerabdruecke, die Fingerprint-Stufe greift also gerade dort nicht, wo sie greifen soll. Steht als offener Rest in 13-VERIFICATION.md (status gaps_found, 3/4 Wahrheiten), war aber bisher nicht im Ledger und damit unsichtbar. Die frueher vermutete Ursache (Normalizer-Defaults) ist mit 9881005 geschlossen und nicht gemeint. | open | | 2026-09-07T08:09:04.188Z | | | 12 | 14 | unrun-verify | .planning/phases/14-rss-email-alert-ingestion-module-rollout/14-03-PLAN.md | | 14-03 Task 4 (checkpoint human-verify, gate blocking): echtes Portal-Alert-Postfach ueber den Exchange/EWS-Weg anbinden und eine echte Alarm-Mail ingestieren. Zu belegen sind (a) die Mail erzeugt eine mandantenprivate Ausschreibung, (b) ein anderer Mandant sieht sie nicht, (c) der EWS-Body-Abruf liefert nicht-leeren, nicht-verstuemmelten Inhalt gegen einen echten Exchange-Server. Der handgeschriebene NTLM/SOAP-Weg ist nur gegen gemocktes httpntlm.post geprueft, nie gegen einen echten Server. Braucht ein echtes Postfach - vom User am 2026-07-24 bewusst zurueckgestellt. Stand bisher nur in 14-VERIFICATION.md (status human_needed), nicht im Ledger. | open | | 2026-09-07T08:09:04.406Z | | @@ -145,10 +145,10 @@ last_updated: 2026-09-07T08:09:04.406Z "file": "apps/web/src/app/(portal)/modules/tender-radar/page.tsx", "line": null, "description": "PERM-04 greift nicht auf modul-eigenen Routen: der Zugriffs-Guard sitzt nur in modules/[category]/[moduleSlug]/page.tsx. Die vier fest verdrahteten Modulrouten (tender-radar, dkv-fleet, cert-manager, domaincheck) samt Unterseiten (z.B. tender-radar/my-sources) laufen daran vorbei und rendern fuer einen USER OHNE Modulfreigabe vollstaendig, inklusive bedienbarer Knoepfe. Im Browser gemessen am 2026-09-07 mit nutzer2 (keine Freigabe): /modules/procurement/tender-radar zeigt korrekt die 403-Seite, /modules/tender-radar und /modules/tender-radar/my-sources und /modules/dkv-fleet zeigen die volle Seite. Keine Datenpreisgabe - die API antwortet auf allen Endpunkten mit 403 - aber der Nutzer sieht Bedienelemente, die er nicht benutzen darf, und bekommt rohe englische Techniktexte statt einer verstaendlichen Meldung. Beleg: .planning/phases/17-eigene-ausschreibungs-quellen-je-nutzer/uat-2026-09-07/befund-modul-eigene-route-ohne-freigabe.png", - "status": "open", + "status": "fixed", "reason": "", "recorded_at": "2026-09-07T08:03:45.978Z", - "resolved_at": null + "resolved_at": "2026-09-07T08:40:04.951Z" }, { "id": 11, diff --git a/.planning/phases/15-modul-berechtigungen-gruppen-user-grants/15-UAT-2026-09-07.md b/.planning/phases/15-modul-berechtigungen-gruppen-user-grants/15-UAT-2026-09-07.md index 5e9f9c1..d42e2a2 100644 --- a/.planning/phases/15-modul-berechtigungen-gruppen-user-grants/15-UAT-2026-09-07.md +++ b/.planning/phases/15-modul-berechtigungen-gruppen-user-grants/15-UAT-2026-09-07.md @@ -4,7 +4,8 @@ kind: uat-nachtrag date: 2026-09-07 windows_addressed: [1, 2, 3] windows_opened: [10] -result: 2 von 3 bestanden, 1 mit Befund +windows_closed_later: [10] +result: 2 von 3 bestanden, 1 mit Befund — Befund am selben Tag behoben und gegengeprueft --- # Phase 15 — Browser-Gegenproben, nachgeholt am 2026-09-07 @@ -119,11 +120,36 @@ Diese laufen am Guard vorbei. Im Browser als `nutzer2` **ohne** Freigabe gemesse Beleg: `uat-2026-09-07/befund-modul-eigene-route-ohne-freigabe.png` -**Erwartete Behebung:** Die Zugriffsprüfung gehört in ein gemeinsames Layout über -allen Modulrouten (etwa `(portal)/modules/layout.tsx` mit Auflösung des Modul-Slugs -aus dem Pfad) statt in die einzelne Seitenkomponente der generischen Route. +**Behoben am 2026-09-07** (Quick-Task `260907-e8k`, Commits `4a23e13`, `69b6418`). +Umgesetzt wurde nicht ein einzelnes Layout mit Pfadauflösung, sondern je ein `layout.tsx` +pro Modulverzeichnis mit fest eingetragenem Slug — ein Layout deckt in Next.js alle +verschachtelten Unterrouten automatisch mit ab, und der Slug steht damit explizit im Code +statt aus dem Pfad geraten zu werden. Das 403-Markup liegt jetzt einmal als gemeinsame +Komponente vor, die generische Route nutzt dieselbe. Ein Test liest das Modulverzeichnis +aus und verlangt für jedes nicht-dynamische Unterverzeichnis eine `layout.tsx`, damit ein +künftiges Modul die Lücke nicht erneut aufreißt. + +### Gegenprobe im Browser nach dem Fix (2026-09-07) + +Frisch gebautes Web-Image, echter Chrome, dieselben Konten: + +| Konto | Adresse | Ergebnis | +|---|---|---| +| `admin` (SUPER_ADMIN) | `/modules/tender-radar`, `/modules/tender-radar/my-sources`, `/modules/dkv-fleet`, `/modules/procurement/tender-radar` | alle **unverändert offen** — die Sperre trifft niemanden zu viel | +| `nutzer1` (Freigabe über Gruppe) | `/modules/tender-radar/my-sources` | offen, alle drei Abschnitte da — Phase-17-Funktion unbeschädigt | +| `nutzer2` (keine Freigabe) | `/modules/tender-radar`, `/modules/tender-radar/my-sources`, `/modules/tender-radar/settings`, `/modules/dkv-fleet` | alle **gesperrt**, 403-Seite als Serverantwort | +| `nutzer2` auf `/modules/cert-manager` (dort **hat** er eine Freigabe) | | **offen** — die Gegenprobe gegen Überschießen | + +Beleg: `uat-2026-09-07/w10-fix-my-sources-gesperrt.png` + +**Messhinweis für spätere Prüfungen:** Ein erster Versuch, die Adressen per `fetch()` aus der +laufenden Seite heraus zu prüfen, meldete fälschlich *alle* Seiten als gesperrt — auch für den +Administrator. Der Aufruf führt die Sitzung nicht so mit, wie eine echte Navigation es tut. Die +Zahlen oben stammen ausschließlich aus echten Seitenaufrufen. Wer das nachprüft, sollte nicht +per `fetch` messen. ## Ergebnis -WINDOWS #1 und #2 sind geschlossen. #3 ist als Durchlauf erledigt; der dabei -gefundene Defekt ist als #10 eigenständig erfasst und bleibt offen. +WINDOWS #1 und #2 sind geschlossen. #3 ist als Durchlauf erledigt. Der dabei gefundene +Defekt wurde als #10 erfasst, am selben Tag behoben und im Browser gegengeprüft — er ist +damit ebenfalls geschlossen. diff --git a/.planning/phases/15-modul-berechtigungen-gruppen-user-grants/uat-2026-09-07/w10-fix-my-sources-gesperrt.png b/.planning/phases/15-modul-berechtigungen-gruppen-user-grants/uat-2026-09-07/w10-fix-my-sources-gesperrt.png new file mode 100644 index 0000000000000000000000000000000000000000..93100ae67546549e19ce475f2a3063e58db50ddb GIT binary patch literal 34507 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