Zustaendigkeit: DogFather und Manager zaehlen wie ein Scout

Filipe: "dogfather soll auch zaehlen wie bananastift und patrick."

Beim Nachsehen war das kein Wunsch, sondern ein Fehlerbericht. In der
Auswahl "Betreut von" stand "DogFather" -- aber als LEER-Wert, nicht als
Person. Es sah aus wie eine Zuordnung und war keine. Genau dieselben
Creator zaehlten deshalb gleichzeitig im Hinweis "Creator ohne
zustaendige Person". Zwei Aussagen ueber denselben Sachverhalt, beide auf
demselben Bildschirm, beide fuer sich stimmig.

Jetzt kann jede betreuende Rolle eingetragen werden -- DogFather, Manager
und Scouts, in der ueblichen Reihenfolge. Der Leer-Wert heisst, was er
ist: "— niemand —". Bei DogFather und Manager steht die Rolle in
Klammern dabei; bei aehnlichen Namen ist sonst nicht zu erkennen, wen man
eintraegt. Und "betreut N Creator" steht jetzt an jeder betreuenden
Person, nicht nur an Scouts.

DER WICHTIGE TEIL: An den RECHTEN aendert das nichts.

Die Zustaendigkeit steuert die Sichtbarkeit NUR beim Scout -- die Leitung
sieht ohnehin jeden Creator. Waere das anders, haette eine
Anzeigeeinstellung still Rechte vergeben. Der Test weist beide Richtungen
nach:

  * Tili auf DogFather eingetragen -> KEIN Scout sieht sie.
  * Tili auf Patrick eingetragen   -> nur Patrick sieht sie, BananaStift
                                      weiterhin nicht.
  * Zurueck auf DogFather          -> Patrick verliert die Sicht wieder.
  * DogFather sieht in allen drei Faellen unveraendert beide Creator.

Ein Creator kann nicht zustaendig sein -- das waere eine Rolle, die es
nicht gibt. Und ein Scout kann die Zustaendigkeit weiterhin nicht selbst
setzen (404), sonst haette er die Rechtevergabe in der Hand, die ihn
begrenzen soll.

20 Pruefungen, darunter die Gegenprobe zum Hinweis: Auf "niemand"
zurueckgesetzt MUSS er wiederkommen, sonst waere er wertlos.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-08-31 23:40:27 +02:00
co-authored by Claude Opus 5
parent 7673c12136
commit 24048ff0e0
20 changed files with 314 additions and 114 deletions
+25 -6
View File
@@ -102,9 +102,20 @@ personenRouter.get("/workspace/api/verwaltung/personen", (req, res) => {
FROM personen p
LEFT JOIN betreuung b ON b.creator_id = p.id
ORDER BY ${ROLLEN_SORTIERUNG.replace("rolle", "p.rolle")}, p.aktiv DESC, p.name`).all(),
/* Wer ueberhaupt als zustaendig eingetragen werden kann. */
/* Wer ueberhaupt als zustaendig eingetragen werden kann.
Bis zum 31.08.2026 waren das nur Scouts. In der Auswahl stand
"DogFather" -- aber als LEER-Wert, nicht als Person. Das sah aus
wie eine Zuordnung und war keine: Dieselben Creator zaehlten
gleichzeitig im Hinweis "Creator ohne zustaendige Person". Zwei
Stellen, zwei Aussagen, beide auf demselben Bildschirm.
Jetzt kann jede betreuende Rolle eingetragen werden -- DogFather
und Manager genauso wie Scouts. In der ueblichen Reihenfolge. */
betreuer: db().prepare(
"SELECT id, name FROM personen WHERE rolle = 'scout' AND aktiv = 1 ORDER BY name").all(),
`SELECT id, name, rolle FROM personen
WHERE rolle IN ('admin', 'manager', 'scout') AND aktiv = 1
ORDER BY ${ROLLEN_SORTIERUNG}, name`).all(),
});
} catch (fehler) {
console.error("[workspace] Personen lesen:", fehler?.message);
@@ -137,10 +148,18 @@ personenRouter.put("/workspace/api/verwaltung/betreuung/:id", gleicheHerkunft, (
if (!Number.isInteger(z) || z < 1) return res.status(400).json({ fehler: "Ungültige Auswahl." });
const betreuer = db().prepare(
"SELECT id, name, rolle FROM personen WHERE id = ? AND aktiv = 1").get(z);
/* Nur Scouts. Das Management sieht ohnehin alle Creator und braucht
keinen Eintrag -- einer waere irrefuehrend. */
if (!betreuer || betreuer.rolle !== "scout") {
return res.status(400).json({ fehler: "Zuständig können nur aktive Scouts sein." });
/* DogFather, Manager und Scouts. Ein Creator kann nicht fuer einen
anderen zustaendig sein -- das waere eine Rolle, die es nicht gibt.
WICHTIG: Ein Eintrag auf DogFather oder Manager aendert an den
RECHTEN nichts. Die Leitung sieht ohnehin jeden Creator; der
Eintrag sagt nur, WER sich kuemmert. Nur beim Scout entscheidet er
zusaetzlich ueber die Sichtbarkeit -- deshalb steht die Regel
dafuer unveraendert in betreuteIds(). */
if (!betreuer || !["admin", "manager", "scout"].includes(betreuer.rolle)) {
return res.status(400).json({
fehler: "Zuständig können nur aktive DogFather, Manager oder Scouts sein.",
});
}
betreuungSetzen(id, z, { ...req.person, ip: echteIp(req) });