DogFather konnte einen zweiten DogFather nicht mehr herabstufen
Gefunden beim Durchsehen der schnellen Pruefungen: pruef-haus-trennung stand auf 60 ok / 6 Fehler. Drei Ursachen, eine davon ein echter Rueckschritt von gestern. --- 1. DER RUECKSCHRITT --------------------------------------------- In darfRolleAendern stand seit gestern: if (person.rolle === "admin") return ziel.rolle !== "admin"; Das macht aus "DogFather ist nicht mehr VERGEBBAR" ein "an einem DogFather ist nichts mehr zu aendern". Ein zweiter Zugang liess sich damit nie wieder zuruecksetzen -- er waere fuer immer DogFather geblieben. Die Pruefung sagte es woertlich: "solange es zwei gibt, darf einer wechseln (403)". Die beiden echten Gefahren haengen woanders und bleiben unberuehrt: Niemand KANN 'admin' vergeben, und der LETZTE DogFather laesst sich nicht herabstufen. --- 2. ZWEI SCHLOESSER FUER DIESELBE TUER --------------------------- Ich hatte gestern `rollenZumAendern` mit 403 VOR die vorhandene Pruefung gesetzt, die mit 400 "Unbekannte Rolle." antwortet. Damit war die Luecke wieder offen, vor der der Kommentar vom 17.09. direkt daneben warnt: Zwei verschiedene Antworten -- "gibt es nicht" gegen "darfst du nicht" -- verraten beim Durchprobieren, WELCHE Rollen existieren. Jetzt eine Regel an einer Stelle. `darfAnlegen` ist dort raus, weil Vergeben und Anlegen seit gestern verschiedene Dinge sind. Gemessen: admin anlegen = aendern (sieben Rollen) spicy anlegen = aendern (vier) hand anlegen = — aendern = modi, gast manager anlegen = creator aendern = — Und die eigene Zeile bekommt jetzt 400 mit einem Satz statt 403: Es ist keine Rechtefrage, sondern eine unsinnige Bitte. --- 3. DREI ERWARTUNGEN, DIE AELTER WAREN ALS DIE REGEL -------------- Die Pruefung verlangte 403, wo seit dem 17.09. 400 richtig ist -- ihre Zeile stammt vom 10.09., sieben Tage aelter als die Regel. Und sie verlangte 404 fuer "die rechte Hand vergibt keine Rolle", was bis vorgestern stimmte. Dabei fiel auf, dass NICHTS geprueft hat, ob die rechte Hand ihre neue Faehigkeit ueberhaupt ausueben kann -- nur, dass sie es nicht darf. Eine Pruefung, die nur das Verbotene misst, laesst offen, ob das Erlaubte geht. Jetzt beide Richtungen: an einer anderen rechten Hand aendert sie nichts (403) und an DogFather erst recht nicht (403) einen Modi macht sie sehr wohl zur Community (200) und es steht so in der Datenbank (gast) eine zweite rechte Hand ernennt sie nicht (400) Nebenbei: `unbekannte_kachel` (gestern eingefuehrt) hatte keinen Satz in meldung.js -- die Kennung waere woertlich auf dem Bildschirm gelandet. pruef-meldungen hatte es gemeldet. Und ein Absturz beim Bauen: `const anlegen = await hole(...)` weiter unten im selben Block verdeckt die gleichnamige Funktion im GANZEN Block, auch oberhalb seiner eigenen Zeile. pruef-haus-trennung: 70 ok, 0 Fehler (vorher 60/6). Dazu gruen: rollen-anlegen 11/0, personen-loeschen 40/0, rechte-umstellen 46/0, verteilen 11/0, meldungen 8/0. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -896,12 +896,21 @@ personenRouter.put("/workspace/api/verwaltung/personen/:id/rolle", gleicheHerkun
|
||||
Sie beantwortet drei Fragen auf einmal: nicht die eigene Rolle,
|
||||
nicht DogFather, und fuer die rechte Hand auch keine zweite
|
||||
rechte Hand. */
|
||||
/* DIE EIGENE ZEILE ZUERST -- und mit 400, nicht 403.
|
||||
|
||||
Sie ist keine Rechtefrage, sondern eine unsinnige Bitte: Es
|
||||
gibt niemanden, der sie duerfte. Eine 403 haette hier
|
||||
ausserdem den Fall "der letzte DogFather tritt zurueck"
|
||||
verschluckt, den die Sicherung weiter unten mit einem
|
||||
verstaendlichen Satz beantwortet. */
|
||||
if (person.id === req.person.id) {
|
||||
return res.status(400).json({
|
||||
fehler: "Deine eigene Rolle kannst du nicht ändern. Das muss jemand anderes tun.",
|
||||
});
|
||||
}
|
||||
if (!darfRolleAendern(req.person, person)) {
|
||||
return res.status(403).json({ fehler: "Diese Rolle darfst du nicht ändern." });
|
||||
}
|
||||
if (!rollenZumAendern(req.person).includes(rolle)) {
|
||||
return res.status(403).json({ fehler: "Diese Rolle vergibst du nicht." });
|
||||
}
|
||||
|
||||
/* Dieselbe Auskunft wie beim Anlegen: Wer eine Rolle nicht
|
||||
vergeben darf, darf sie auch nicht zuweisen. Sonst waere das
|
||||
@@ -924,7 +933,26 @@ personenRouter.put("/workspace/api/verwaltung/personen/:id/rolle", gleicheHerkun
|
||||
Rolle." mit 400). Wer durchprobiert, haette daran ablesen
|
||||
koennen, welche Rollen es gibt. Jetzt beide Faelle wortgleich
|
||||
-- wie beim Anlegen. */
|
||||
if (!darfAnlegen(req.person).includes(rolle)) {
|
||||
/* WELCHE ROLLE DARF DIESE PERSON VERGEBEN.
|
||||
|
||||
Hier stand `darfAnlegen`. Das war richtig, solange Vergeben und
|
||||
Anlegen dasselbe waren -- seit dem 20.09. sind sie es nicht
|
||||
mehr: Die rechte Hand darf NIEMANDEN anlegen und trotzdem
|
||||
'modi' und 'gast' vergeben, ein Manager darf einen Creator
|
||||
anlegen und gar keine Rolle vergeben. Gemessen:
|
||||
|
||||
admin anlegen = aendern (sieben Rollen)
|
||||
spicy anlegen = aendern (vier)
|
||||
hand anlegen = — aendern = modi, gast
|
||||
manager anlegen = creator aendern = —
|
||||
|
||||
WORTGLEICH MIT DEM FALL DARUEBER, und das ist Absicht: Zwei
|
||||
verschiedene Antworten -- "Unbekannte Rolle" gegen "die darfst
|
||||
du nicht vergeben" -- verraten beim Durchprobieren, WELCHE
|
||||
Rollen es gibt. Genau davor warnt der Kommentar von 17.09., und
|
||||
eine 403 an dieser Stelle hatte die Luecke am 20.09. kurz
|
||||
wieder aufgemacht. */
|
||||
if (!rollenZumAendern(req.person).includes(rolle)) {
|
||||
return res.status(400).json({ fehler: "Unbekannte Rolle." });
|
||||
}
|
||||
if (person.rolle === rolle) {
|
||||
|
||||
Reference in New Issue
Block a user