From 03220b3924d0256a33c09c8cab9293afca9d3a33 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Wed, 23 Sep 2026 23:25:42 +0200 Subject: [PATCH] Kanaele machen nur zwei auf MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Filipe: "kanaele sollen auch nur die rechte hand und dogfather aufmachen koennen." Bis heute galt `fuehrtTeamDogi` -- und das schliesst die LINKE Hand ein (WIE_RECHTE_HAND = {hand, linke}). Genau die zwei Worte im Auftrag schliessen sie aus. `fuehrtTeamDogi` SELBST WIRD NICHT ANGEFASST. Es haengt an elf weiteren Stellen: Bereiche, Bretter, Sichtbarkeiten, wer einen Kanal ueberhaupt sieht. Wer die Funktion aendert, aendert zehn Dinge, die niemand verlangt hat. Stattdessen eine eigene Regel fuer genau diese eine Frage -- dieselbe Bauweise wie `darfJedeNachrichtLoeschen` ein paar hundert Zeilen weiter unten, die aus demselben Grund entstanden ist ("zwei Rollen, woertlich die zwei aus dem Auftrag"). Nicht `istLeitung` uebrigens: Das schlösse Spicy Media ein, und genannt wurden zwei Rollen, nicht drei. AN EINER STELLE, NICHT AN ZWEIEN. Der Server lehnt ab, und die Oberflaeche bietet es gar nicht erst an -- beide fragen dieselbe Funktion. Ein Knopf, den man sieht und der dann mit 404 antwortet, ist schlimmer als keiner. WAS ES NICHT BETRIFFT: Wer in einem BESTEHENDEN Kanal die Leute aendert. "Aufmachen" beantwortet diese Frage nicht, also bleibt es dort beim Alten. Falls das auch enger werden soll, sagt Filipe es. Gemessen, alle vier Rollen durchgespielt: DogFather darf -> 201, Seite bietet es an rechte Hand darf -> 201, Seite bietet es an linke Hand darf NICHT -> 404, Seite bietet es nicht an ein Modi darf NICHT -> 404, Seite bietet es nicht an Dazu die Gegenprobe, dass die Absage nichts verraet: Eine erfundene und eine echte Kategorie sehen fuer die linke Hand gleich aus (404 / 404). Sonst waere aus der Fehlermeldung abzulesen, welche Kanaele es gibt. 9 Messungen, 0 Befunde. pruef-chat-kanaele: 81 geprueft, 0 Fehler. Co-Authored-By: Claude Opus 5 --- server/workspace-chat.js | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/server/workspace-chat.js b/server/workspace-chat.js index ca47fb00..e3bdb022 100644 --- a/server/workspace-chat.js +++ b/server/workspace-chat.js @@ -1156,7 +1156,10 @@ chatRouter.get("/workspace/api/chat/raeume", (req, res) => { Oberflaeche zeigt den Knopf ohnehin nur, wenn hier etwas ankommt. Wer nichts anlegen darf, bekommt ein leeres Feld -- und ein leeres Feld sagt nichts. */ - const darfKanal = fuehrtTeamDogi(req.person); + /* DIESELBE FRAGE, DIESELBE ANTWORT. Die Oberflaeche zeigt den + Knopf nur, wenn der Server ihn auch annimmt -- ein Knopf, der + mit 404 antwortet, ist schlimmer als keiner. */ + const darfKanal = darfKanalAufmachen(req.person); const belegt = darfKanal ? new Set(db().prepare("SELECT kategorie FROM chat_raeume WHERE art = 'kanal'") .all().map((z) => z.kategorie)) @@ -1262,11 +1265,31 @@ chatRouter.post("/workspace/api/chat/gruppe", gleicheHerkunft, express.json({ li morgens anlegt und mittags fuellt, ist ein normaler Vorgang; ihn dafuer zweimal aufmachen zu muessen waere eine Regel ohne Zweck. ===================================================================== */ +/** Wer einen Kanal AUFMACHEN darf (23.09.2026). + * + * Filipe: "kanaele sollen auch nur die rechte hand und dogfather + * aufmachen koennen." + * + * NICHT `fuehrtTeamDogi`: Das schliesst die linke Hand ein + * (WIE_RECHTE_HAND = {hand, linke}), und genau die zwei Worte im + * Auftrag schliessen sie aus. NICHT `istLeitung`: Das schliesst + * Spicy Media ein, und genannt wurden zwei Rollen, nicht drei. + * + * Dieselbe Bauweise wie `darfJedeNachrichtLoeschen` weiter unten: + * woertlich die zwei aus dem Auftrag, an EINER Stelle. Wer sie + * spaeter aendert, aendert sie ueberall. + * + * WAS ES NICHT BETRIFFT: Wer in einem bestehenden Kanal die Leute + * aendert -- das ist eine andere Frage, und "aufmachen" beantwortet + * sie nicht. Dort gilt weiter `fuehrtTeamDogi`. */ +const darfKanalAufmachen = (person) => + istDogFather(person) || person?.rolle === "hand"; + chatRouter.post("/workspace/api/chat/kanal", gleicheHerkunft, express.json({ limit: "8kb" }), (req, res) => { try { - /* 404 und nicht 403: Wer keine Kanaele fuehren darf, soll auch + /* 404 und nicht 403: Wer keine Kanaele aufmachen darf, soll auch nicht erfahren, dass es die Moeglichkeit gibt. */ - if (!fuehrtTeamDogi(req.person)) return res.status(404).json({ fehler: "nicht_gefunden" }); + if (!darfKanalAufmachen(req.person)) return res.status(404).json({ fehler: "nicht_gefunden" }); const kategorie = String(req.body?.kategorie ?? "").trim(); if (!MODI_KATEGORIEN.some((k) => k.wert === kategorie)) {