Spicy Media legt Manager UND Scouts an -- eine Liste statt vier
Filipe, mit Bildschirmfoto der Zugaenge-Seite: "die spicy rolle soll auch manager und scouts hinzufuegen koennen." DER MANAGER-KNOPF FEHLTE NICHT AUS RECHTEGRUENDEN. Serverseitig war die Tuer /workspace/api/manager-anlegen fuer Spicy Media die ganze Zeit offen. Es gab nur nichts zum Draufdruecken -- wegen ZWEIER Listen in derselben Funktion, drei Zeilen auseinander (personen.js): const darf = ... spicy ? ['manager', 'creator'] : ['creator']; ... if ((r.wert === 'admin' || r.wert === 'manager') && ich.rolle !== 'admin') continue; Die erste erlaubt den Manager, die zweite nimmt ihn wieder weg. Uebrig blieb ein einziger Knopf: Creator. Nichts war kaputt, nichts wurde rot, es fehlte einfach -- die Sorte Fehler, die nur jemandem auffaellt, der davorsitzt. FUER SCOUTS GAB ES UEBERHAUPT KEINE TUER. Nur DogFather konnte welche anlegen. Und die Wegwahl in der Oberflaeche war eine Kette mit Auffangbecken (`rolle === 'manager' ? ... : creator-anlegen`): Ein Scout waere im else gelandet, und creator-anlegen legt IMMER einen Creator an. Der Knopf haette Erfolg gemeldet und das Falsche getan. DIE ANTWORT STEHT JETZT AN EINER STELLE. `darfAnlegen` in workspace.js sagt, wer wen anlegen darf. Daraus lesen: - die beiden Team-Tueren (Manager, Scout) - die allgemeine Verwaltungs-Tuer von DogFather - die Oberflaeche, ueber `darf_anlegen` in /workspace/api/ich Die Oberflaeche hat damit gar keine eigene Liste mehr und kann deshalb auch nicht mehr abweichen -- weder zu streng noch zu grosszuegig. ZWEI TUEREN, NICHT EINE MIT EINEM ROLLENFELD. Der Absatz an der Manager-Tuer raet davon ab, und der Rat gilt: Eine Tuer, die NICHTS anderes kann, als eine bestimmte Rolle anzulegen, ist sicherer als eine, die vorher nachfragt. `teamTuer(rolle)` baut beide aus demselben Text -- die Rolle wird beim Einhaengen festgelegt und kommt nie aus dem Aufruf. Geprueft: ein mitgeschicktes "rolle: admin" bleibt wirkungslos. GEPRUEFT (pruef-creator-anlegen, 33 -> 49 Pruefungen) - Spicy Media legt Manager an -> 201, Rolle stimmt - Spicy Media legt Scout an -> 201, Rolle stimmt - "rolle: admin" mitgeschickt -> wirkungslos, es wird ein Scout - ein Manager durch die Scout-Tuer -> 404 - ein Scout durch die Scout-Tuer -> 404 - Personenliste lesen -> 200 (die eine gewollte Ausnahme) - darueber anlegen -> 404, und es entsteht niemand - /api/ich nennt Spicy: manager, scout, creator -- und keinen DogFather - ein Manager bekommt genau eine Rolle genannt, ein Scout keine - die Knoepfe auf der Seite stimmen mit alldem ueberein - DogFather sieht unveraendert alle -- gemessen, nicht geglaubt Der erste Anlauf der Pruefung behauptete, Spicy Media komme gar nicht an /workspace/api/verwaltung. Falsch, und sie wurde zu Recht rot: nurAdmin laesst genau einen Fall durch, das LESEN der Personenliste. Diese Trennung ist jetzt festgenagelt. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -115,6 +115,59 @@ const LEITUNG = new Set(["spicy", "admin", "manager"]);
|
||||
export const istLeitung = (person) => !!person && LEITUNG.has(person.rolle);
|
||||
export const istDogFather = (person) => !!person && person.rolle === "admin";
|
||||
|
||||
/* =======================================================================
|
||||
WER DARF WEN ANLEGEN — die einzige Liste dazu (10.09.2026)
|
||||
|
||||
Filipe, mit Bildschirmfoto der Zugaenge-Seite: "die spicy rolle soll
|
||||
auch manager und scouts hinzufuegen koennen."
|
||||
|
||||
Sie konnte es nicht. Der Grund war NICHT ein fehlendes Recht, sondern
|
||||
ZWEI Listen, die einander widersprachen — in derselben Funktion, drei
|
||||
Zeilen auseinander (personen.js):
|
||||
|
||||
const darf = ... : ich.rolle === 'spicy' ? ['manager', 'creator']
|
||||
...
|
||||
if ((r.wert === 'admin' || r.wert === 'manager') && ich.rolle !== 'admin') continue;
|
||||
|
||||
Die erste Zeile erlaubt Spicy Media einen Manager, die zweite nimmt
|
||||
ihn wieder weg. Uebrig blieb genau ein Knopf: Creator. Serverseitig
|
||||
war der Weg fuer den Manager die ganze Zeit offen — es gab nur keinen
|
||||
Knopf dafuer.
|
||||
|
||||
Das ist im Haus die immer gleiche Sorte Fehler: zwei Stellen fuer
|
||||
dieselbe Aussage, und die spaetere gewinnt still. Deshalb steht die
|
||||
Antwort ab jetzt EINMAL hier, und alle fragen sie:
|
||||
|
||||
- die drei Anlege-Wege in workspace-personen.js
|
||||
- die Oberflaeche, ueber `darf_anlegen` in /workspace/api/ich
|
||||
|
||||
Die Oberflaeche hat damit gar keine eigene Liste mehr. Sie kann
|
||||
deshalb auch nicht mehr von der des Servers abweichen — weder zu
|
||||
streng (ein Recht, das niemand findet) noch zu grosszuegig (ein Knopf,
|
||||
der eine Absage bringt).
|
||||
|
||||
WARUM SPICY MEDIA SCOUTS ANLEGEN DARF, ABER KEINE LEITUNG:
|
||||
Ein Scout und ein Manager arbeiten unter Spicy Media — sie
|
||||
einzustellen ist genau die Aufgabe dieser Rolle. Einen DogFather
|
||||
anzulegen ist es nicht: Das waere ein zweiter Zugang mit allen
|
||||
endgueltigen Rechten, und den vergibt nur DogFather selbst.
|
||||
======================================================================= */
|
||||
const ANLEGBAR = {
|
||||
/* DogFather: alles, was es gibt. Er geht ueber /verwaltung/personen. */
|
||||
admin: [...ROLLEN],
|
||||
/* Spicy Media: das ganze Team, aber keine Leitung ueber sich. */
|
||||
spicy: ["manager", "scout", "creator"],
|
||||
/* Ein Manager stellt Creator ein, die er dann auch betreut. */
|
||||
manager: ["creator"],
|
||||
};
|
||||
|
||||
/** Welche Rollen darf diese Person anlegen? Immer ein Feld, nie null —
|
||||
* wer nichts darf, bekommt eine leere Liste und keinen Sonderfall. */
|
||||
export function darfAnlegen(person) {
|
||||
if (!person) return [];
|
||||
return [...(ANLEGBAR[person.rolle] ?? [])];
|
||||
}
|
||||
|
||||
/* WER FUEHRT TEAM DOGI? (10.09.2026)
|
||||
*
|
||||
* DogFather und seine rechte Hand -- und sonst niemand. Spicy Media und
|
||||
@@ -3262,6 +3315,14 @@ workspaceRouter.get("/workspace/api/ich", (req, res) => {
|
||||
rolle_name: ROLLEN_NAME[person.rolle] ?? person.rolle,
|
||||
sicht,
|
||||
bild,
|
||||
/* WELCHE ROLLEN ICH ANLEGEN DARF (10.09.2026).
|
||||
|
||||
Damit hat die Oberflaeche keine eigene Liste mehr. Vorher standen
|
||||
dort zwei, die einander widersprachen, und Spicy Media sah
|
||||
deshalb nur den Creator-Knopf — obwohl der Weg fuer den Manager
|
||||
serverseitig offen war. Wer die Antwort nur an einer Stelle hat,
|
||||
kann sie nicht an zweien verschieden haben. */
|
||||
darf_anlegen: darfAnlegen(person),
|
||||
/* DIE KACHELN, WENN SIE NICHT IM BROWSER STEHEN DUERFEN.
|
||||
|
||||
Fuer die fuenf bekannten Rollen steht hier `null`, und die
|
||||
|
||||
Reference in New Issue
Block a user