From f38b9f203fdde42946354afdb0f9d4289f4566ec Mon Sep 17 00:00:00 2001 From: Schalli Date: Tue, 11 Aug 2026 14:57:14 +0200 Subject: [PATCH] docs: backlog the tender-radar settings page mixing roles The page carries platform config, tenant config and one per-user setting. The per-user one -- the digest interval, which is what an ordinary user actually comes for -- sits last, below three blocks they may not change. Checked before writing it up: this is not a permission hole. The admin endpoints are @Roles-guarded server side, so a normal user cannot change anything; the page simply has no role check of its own, so they see controls that fail on save. The second half is a product question deliberately left open, because it is not specific to this module: DKV-Fleet has the same shape, and every future module with a personal setting will ask it again. Co-Authored-By: Claude Opus 5 (1M context) --- ...nder-radar-einstellungen-mischen-rollen.md | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 .planning/todos/pending/2026-08-11-tender-radar-einstellungen-mischen-rollen.md diff --git a/.planning/todos/pending/2026-08-11-tender-radar-einstellungen-mischen-rollen.md b/.planning/todos/pending/2026-08-11-tender-radar-einstellungen-mischen-rollen.md new file mode 100644 index 0000000..621097c --- /dev/null +++ b/.planning/todos/pending/2026-08-11-tender-radar-einstellungen-mischen-rollen.md @@ -0,0 +1,60 @@ +--- +created: 2026-08-11 +title: Ausschreibungs-Radar — Einstellungsseite mischt Administration und persoenliche Einstellung +area: tender-radar +severity: minor +trigger: wenn das Modul das erste Mal von normalen Nutzern verwendet wird, nicht nur von Admins +files: + - apps/web/src/app/(portal)/modules/tender-radar/settings/page.tsx + - apps/web/src/app/(portal)/settings/general/account + - apps/api/src/tenders/tenders.controller.ts +--- + +## Problem + +`/modules/tender-radar/settings` traegt vier Abschnitte, die drei verschiedenen +Zustaendigkeiten gehoeren: + +| Abschnitt | Gehoert | +|---|---| +| Quelle (Abrufintervall, Aktiv) | Plattform-Administration | +| RSS-Feeds | Plattform-Administration (ausdruecklich fuer alle Mandanten gleich) | +| E-Mail-Alerts (Postfach) | Mandanten-Administration | +| **Benachrichtigungen (Digest-Intervall)** | **dem einzelnen Nutzer** | + +Das Digest-Intervall ist die einzige persoenliche Einstellung auf der Seite — +`TenderNotificationPref` haengt an `userId`, nicht am Mandanten (NOTIFY-01/D-03). +Sie steht als letzter Abschnitt unter drei Bloecken, die ein normaler Nutzer +weder aendern darf noch braucht. Wer nur seinen Digest auf woechentlich stellen +will, scrollt an Abrufintervallen, Feed-URLs und Postfach-Zugangsdaten vorbei. + +**Kein Berechtigungsloch:** die zugehoerigen API-Endpunkte (`source-config`, +`rss-feeds`, Postfach) sind serverseitig mit `@Roles(ADMIN, SUPER_ADMIN)` +abgesichert (`tenders.controller.ts`). Ein normaler Nutzer kann dort also +nichts verstellen — er sieht die Bedienelemente aber und laeuft beim Speichern +in eine Fehlermeldung, weil die Seite selbst keine Rollenpruefung hat. + +Aufgefallen am 2026-08-11 beim Erklaeren des Moduls: der User fragte, wo man +die Benachrichtigungsfrequenz einstellt, und die ehrliche Antwort war "ganz +unten auf der Admin-Seite". + +## Solution + +Richtung, nicht beschlossen — der zweite Punkt ist eine Produktfrage: + +1. **Die Admin-Abschnitte hinter eine Rollenpruefung legen**, damit ein + normaler Nutzer sie gar nicht erst sieht. Kleinster sinnvoller Schritt, + loest den Fehlermeldungs-Fall und den groessten Teil der Verwirrung. +2. **Wohin gehoert die persoenliche Einstellung?** Es gibt bereits + `/settings/general/account` fuer nutzereigene Einstellungen. Drei Varianten: + - Digest-Intervall dorthin verschieben — konsequent, aber modulfremde + Einstellungen in einer allgemeinen Seite sammeln sich mit jedem weiteren + Modul an. + - Im Modul lassen, aber sichtbar abgetrennt und oberhalb der Admin-Bloecke. + - Eine eigene, nutzerseitige Modulseite ("Meine Benachrichtigungen") + getrennt von der Admin-Seite. + + Die Antwort betrifft nicht nur dieses Modul: DKV-Fleet hat dieselbe Bauform + (`modules/dkv-fleet/settings`), und jedes kuenftige Modul mit persoenlichen + Einstellungen wird die Frage erneut stellen. Sinnvollerweise einmal + grundsaetzlich entscheiden statt pro Modul.