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)) {