f38b9f203f
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>
61 lines
2.8 KiB
Markdown
61 lines
2.8 KiB
Markdown
---
|
|
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.
|