Files
tessera-ctl/.planning/todos/pending/2026-08-11-tender-radar-einstellungen-mischen-rollen.md
T
schalli f38b9f203f
Tessera CI/CD / Lint & Type Check (push) Successful in 44s
Tessera CI/CD / Tests (push) Successful in 50s
Tessera CI/CD / Build & Publish Images (push) Successful in 8s
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) <noreply@anthropic.com>
2026-08-11 14:57:14 +02:00

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
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.