Die rechte Hand legt selbst Personen an -- und sieht die Codes
Filipe: "dan will ich dass die rechte hand auch neue personen hinzufuegen kann. also neue erstellen kann und die codes genau so sieht wie dogfather, damit sie das auch machen kann wenn er live ist." WAS SIE DARF: Modis und Community anlegen, und deren Codes neu setzen. Die Liste ist ABGELEITET aus ROLLEN_ZUM_AENDERN -- dieselben zwei Rollen, die sie ohnehin vergeben darf. Zwei Listen waeren zwei Gelegenheiten, eine davon zu aendern und die andere zu vergessen. WAS SIE NICHT DARF: eine zweite rechte Hand, eine linke Hand oder einen zweiten DogFather anlegen -- und an einer linken Hand auch nichts aendern. Ohne die zweite Schranke haette sie den Code einer linken Hand neu setzen koennen und damit einen Zugang in der Hand, der fast so viel darf wie sie selbst. Die alte Schranke kannte nur "admin" und "manager". NUR DIE RECHTE, NICHT DIE LINKE. `istHand()` haette beide getroffen; fuer die linke Hand ist "legt niemanden an" eine ausdrueckliche Entscheidung vom 21.09. VIER STELLEN IN DER OBERFLAECHE, die alle an Rollennamen hingen: `nurLesen = ich.rolle === 'hand'` -- sie bekam die Liste und kein Formular. Jetzt abgeleitet aus `darf_anlegen`. Die Wache darueber warf sie auf die Startseite, sobald `nurLesen` falsch wurde. Die Seite ging fuer sie einfach nicht auf, ohne Meldung. Der Sendeweg hing an `ich.rolle === 'admin'`. Fuer sie gab es damit GAR KEINEN: Die Seite antwortete "Fuer die Rolle modi gibt es hier keinen Weg" -- ein Satz, der wie ein Formularfehler klingt und eine fehlende Zeile war. UND EIN ECHTER FUND: `rollenwahlErgaenzen()` hing jede Zusatzrolle an das Formular, die mit der Personenliste kam -- ohne zu fragen, ob man sie anlegen darf. Solange nur DogFather das Formular sah, fiel es nicht auf: Er darf sie alle. Der rechten Hand bot es "rechte Hand" und "linke Hand" an. Der Server haette es abgelehnt -- aber der Knopf verriet eine Rolle, die sie nicht vergeben soll. Zwei Pruefungen waren dabei selbst kaputt: pruef-personen-formular erwartete sieben Rollen (seit "linke" am 21.09. sind es acht) und suchte den Namen im sichtbaren Text -- die Abschnitte sind zugeklappt und zeigen nur Anfangsbuchstaben. Beides abgeleitet statt gezaehlt. Geprueft: pruef-personen-formular 43/0 (war 34 ok / 2 FEHL), davon neun am echten Bildschirm auf der Crew-Adresse -- anmelden, Formular oeffnen, anlegen, Code lesen, Person in der Liste wiederfinden. pruef-haus-trennung 81/0 (war 72 ok / 2 FEHL), pruef-rollen-anlegen 11/0.
This commit is contained in:
@@ -681,12 +681,50 @@ console.log("=== Alle Kategorien ===");
|
||||
ok((beiHand?.zusatzrollen || []).length > 0,
|
||||
"samt der Ueberschriften");
|
||||
|
||||
/* SIE LIEST NUR. Jeder schreibende Weg bleibt zu -- gemessen, nicht
|
||||
angenommen, denn genau hier waere aus "sehen" versehentlich
|
||||
"verwalten" geworden. */
|
||||
const codeVersuch = await hole(`/workspace/api/verwaltung/personen/${idModi}/code`,
|
||||
/* SIE DARF AUCH CODES NEU SETZEN (22.09.2026).
|
||||
------------------------------------------------------------------
|
||||
Hier stand `=== 404` ("sie liest nur"). Filipe hat das umgedreht:
|
||||
"die codes genau so sieht wie dogfather, damit sie das auch machen
|
||||
kann wenn er live ist."
|
||||
|
||||
Ein Code wird genau einmal angezeigt. Geht er verloren, ist der
|
||||
Zugang ohne diesen Weg tot -- und dann muesste doch wieder
|
||||
DogFather ran, also genau das, was nicht sein soll. */
|
||||
/* EIN FRISCHER MODI, KEIN GEBRAUCHTER (berichtigt 22.09.2026).
|
||||
Hier stand `idModi` -- und der ist weiter oben laengst zur rechten
|
||||
Hand befoerdert worden. Die Pruefung mass damit "darf sie an einer
|
||||
rechten Hand etwas aendern" und nicht "darf sie an einem Modi".
|
||||
Dieselbe Falle wie am 21.09. bei Ayla. */
|
||||
const frischFuerCode = await hole("/workspace/api/verwaltung/personen",
|
||||
{ host: CREW, methode: "POST", keks: dogi.keks,
|
||||
rumpf: JSON.stringify({ name: "Codeprobe", rolle: "modi" }) });
|
||||
const idFuerCode = frischFuerCode.daten?.person?.id ?? frischFuerCode.daten?.id;
|
||||
ok(!!idFuerCode, `ein frischer Modi zum Messen (${idFuerCode || "keiner"})`);
|
||||
const codeVersuch = await hole(`/workspace/api/verwaltung/personen/${idFuerCode}/code`,
|
||||
{ host: CREW, methode: "POST", keks: hand.keks, rumpf: "{}" });
|
||||
ok(codeVersuch.status === 404, `sie kann keinen Code neu setzen (${codeVersuch.status})`);
|
||||
ok(codeVersuch.status === 200,
|
||||
`sie kann einen Code neu setzen (${codeVersuch.status})`);
|
||||
ok(typeof codeVersuch.daten?.code === "string" && codeVersuch.daten.code.length > 6,
|
||||
`und sieht ihn dabei (${codeVersuch.daten?.code ? "ja" : "NEIN"})`);
|
||||
|
||||
/* DIE GRENZE DAZU: an einer LINKEN HAND aendert sie nichts. Ohne
|
||||
diese Schranke haette sie einen Zugang in der Hand, der fast so
|
||||
viel darf wie sie selbst -- und aufgefallen waere es nicht, denn
|
||||
die alte Schranke kannte nur "admin" und "manager". */
|
||||
{
|
||||
const frisch = await hole("/workspace/api/verwaltung/personen",
|
||||
{ host: CREW, methode: "POST", keks: dogi.keks,
|
||||
rumpf: JSON.stringify({ name: "Lino Zweit", rolle: "linke" }) });
|
||||
const idLinke = frisch.daten?.person?.id ?? frisch.daten?.id;
|
||||
if (idLinke) {
|
||||
const anLinke = await hole(`/workspace/api/verwaltung/personen/${idLinke}/code`,
|
||||
{ host: CREW, methode: "POST", keks: hand.keks, rumpf: "{}" });
|
||||
ok(anLinke.status === 403,
|
||||
`an einer linken Hand aendert sie nichts (${anLinke.status})`);
|
||||
} else {
|
||||
ok(false, "die Gegenprobe konnte keine linke Hand anlegen -- nicht messbar");
|
||||
}
|
||||
}
|
||||
/* ROLLEN WECHSELN DARF SIE SEIT DEM 20.09. -- aber nicht alles.
|
||||
|
||||
Filipe: "ich will dass ich da auch die rollen der leute wechseln
|
||||
@@ -740,10 +778,24 @@ console.log("=== Alle Kategorien ===");
|
||||
{ host: CREW, methode: "PUT", keks: hand.keks, rumpf: JSON.stringify({ rolle: "hand" }) });
|
||||
ok(zuHoch.status === 400,
|
||||
`eine zweite rechte Hand ernennt sie nicht (${zuHoch.status})`);
|
||||
/* UND SIE LEGT PERSONEN AN (22.09.2026) -- Filipes ausdruecklicher
|
||||
Wunsch. Hier stand `=== 404`. */
|
||||
const anlegen = await hole("/workspace/api/verwaltung/personen",
|
||||
{ host: CREW, methode: "POST", keks: hand.keks,
|
||||
rumpf: JSON.stringify({ name: "Nochwer", rolle: "modi" }) });
|
||||
ok(anlegen.status === 404, `und niemanden anlegen (${anlegen.status})`);
|
||||
ok(anlegen.status === 201, `sie legt einen Modi an (${anlegen.status})`);
|
||||
ok(typeof (anlegen.daten?.code) === "string",
|
||||
`und bekommt den Code zu sehen (${anlegen.daten?.code ? "ja" : "NEIN"})`);
|
||||
|
||||
/* ABER KEINE ZWEITE RECHTE HAND UND KEINE LINKE -- sonst waere
|
||||
"sie darf anlegen" ein Weg, sich selbst hoehere Rechte zu bauen. */
|
||||
for (const rolle of ["hand", "linke", "admin"]) {
|
||||
const zuHochAnlegen = await hole("/workspace/api/verwaltung/personen",
|
||||
{ host: CREW, methode: "POST", keks: hand.keks,
|
||||
rumpf: JSON.stringify({ name: "Zu hoch " + rolle, rolle }) });
|
||||
ok(zuHochAnlegen.status >= 400,
|
||||
`eine Rolle "${rolle}" legt sie nicht an (${zuHochAnlegen.status})`);
|
||||
}
|
||||
|
||||
/* GEGENPROBE: DogFather darf all das sehr wohl -- sonst hiessen die
|
||||
drei 404 oben auch dann gruen, wenn die Wege ueberhaupt kaputt
|
||||
|
||||
Reference in New Issue
Block a user