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) <noreply@anthropic.com>
2.8 KiB
created, title, area, severity, trigger, files
| created | title | area | severity | trigger | files | |||
|---|---|---|---|---|---|---|---|---|
| 2026-08-11 | Ausschreibungs-Radar — Einstellungsseite mischt Administration und persoenliche Einstellung | tender-radar | minor | wenn das Modul das erste Mal von normalen Nutzern verwendet wird, nicht nur von Admins |
|
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:
-
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.
-
Wohin gehoert die persoenliche Einstellung? Es gibt bereits
/settings/general/accountfuer 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.