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:
@@ -150,8 +150,28 @@
|
||||
function rollenwahlErgaenzen(zusatz) {
|
||||
const ziel = $('f-rolle');
|
||||
if (!ziel || !Array.isArray(zusatz) || !zusatz.length) return;
|
||||
/* NUR, WAS MAN AUCH ANLEGEN DARF (22.09.2026).
|
||||
------------------------------------------------------------------
|
||||
Hier wurde jede Zusatzrolle angehaengt, die mit der Personenliste
|
||||
kam -- ohne zu fragen, ob diese Person sie vergeben darf. Solange
|
||||
nur DogFather das Formular sah, fiel es nicht auf: Er darf sie
|
||||
alle.
|
||||
|
||||
Seit die rechte Hand anlegt (22.09.), bot das Formular ihr
|
||||
"rechte Hand" und "linke Hand" an. Der Server haette es abgelehnt
|
||||
-- aber ein Knopf, der eine Absage bringt, gehoert gar nicht erst
|
||||
hin, und schlimmer: Er verraet eine Rolle, die sie nicht vergeben
|
||||
soll.
|
||||
|
||||
Gefragt wird dieselbe Liste wie in baueRollenwahl(). Zwei Quellen
|
||||
fuer "was darf ich anlegen" waeren zwei Gelegenheiten, eine davon
|
||||
zu vergessen -- genau das ist hier passiert. */
|
||||
const darf = Array.isArray(ich?.darf_anlegen) && ich.darf_anlegen.length
|
||||
? ich.darf_anlegen
|
||||
: null;
|
||||
for (const r of zusatz) {
|
||||
if (!r || !r.wert || ziel.querySelector(`[data-rolle="${r.wert}"]`)) continue;
|
||||
if (darf && !darf.includes(r.wert)) continue;
|
||||
ziel.append(rollenKnopf(ziel, r));
|
||||
}
|
||||
}
|
||||
@@ -1138,15 +1158,30 @@ Der Code gilt einmal fuer die `
|
||||
scout: '/workspace/api/scout-anlegen',
|
||||
creator: '/workspace/api/creator-anlegen',
|
||||
};
|
||||
const weg = ich.rolle === 'admin' ? '/workspace/api/verwaltung/personen' : TUEREN[rolle];
|
||||
if (!weg) {
|
||||
melde(`Für die Rolle „${rolle}“ gibt es hier keinen Weg.`);
|
||||
return;
|
||||
}
|
||||
/* DER WEG HAENGT AN DER ROLLE, DIE ANGELEGT WIRD -- nicht an der
|
||||
des Anlegenden (berichtigt 22.09.2026).
|
||||
|
||||
Hier stand `ich.rolle === 'admin' ? verwaltung : TUEREN[rolle]`.
|
||||
Fuer die rechte Hand, die seit heute Modis und Community
|
||||
anlegen darf, gab es damit GAR KEINEN Weg: `TUEREN` kennt nur
|
||||
die drei Agenturrollen, und die Seite antwortete mit "Fuer die
|
||||
Rolle modi gibt es hier keinen Weg" -- ein Satz, der wie ein
|
||||
Fehler im Formular klingt und in Wahrheit eine fehlende Zeile
|
||||
war.
|
||||
|
||||
Jetzt: Gibt es fuer diese Rolle eine eigene Tuer (manager,
|
||||
scout, creator), wird sie genommen -- ausser von DogFather,
|
||||
der ohnehin den allgemeinen Weg hat. Sonst der allgemeine Weg,
|
||||
und der prueft `darfAnlegen` am Server. */
|
||||
const eigeneTuer = TUEREN[rolle];
|
||||
const weg = (eigeneTuer && ich.rolle !== 'admin')
|
||||
? eigeneTuer : '/workspace/api/verwaltung/personen';
|
||||
const a = await hole(weg, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(ich.rolle === 'admin'
|
||||
/* Die eigenen Tueren kennen ihre Rolle selbst; der allgemeine
|
||||
Weg braucht sie im Rumpf. */
|
||||
body: JSON.stringify(weg === '/workspace/api/verwaltung/personen'
|
||||
? { name: $('f-name').value, rolle }
|
||||
: { name: $('f-name').value }),
|
||||
});
|
||||
@@ -1189,8 +1224,29 @@ Der Code gilt einmal fuer die `
|
||||
entscheidet der Server (nurAdmin lässt sie nur an die Liste, und
|
||||
nur lesend). Diese Zeile erspart ihr nur den Umweg über eine
|
||||
Seite, die sie sofort wieder wegschickt. */
|
||||
const nurLesen = ich.rolle === 'hand';
|
||||
if (!LEITUNG.has(ich.rolle) && !nurLesen) {
|
||||
/* WER HIER NICHTS ANLEGEN DARF, BEKOMMT NUR DIE LISTE.
|
||||
------------------------------------------------------------------
|
||||
Hier stand `ich.rolle === 'hand'` -- ein Rollenname, und seit dem
|
||||
22.09.2026 der falsche: Die rechte Hand LEGT AN. Filipe: "damit
|
||||
sie das auch machen kann wenn er live ist."
|
||||
|
||||
Gefragt wird jetzt, was der Server ihr zugesteht (`darf_anlegen`
|
||||
aus /api/ich). Damit kann diese Zeile nicht mehr von der Regel
|
||||
abweichen -- und eine Rolle, die morgen nur lesen darf, faellt
|
||||
von selbst hierher, ohne dass jemand daran denkt. */
|
||||
const darfHierAnlegen = Array.isArray(ich.darf_anlegen) && ich.darf_anlegen.length > 0;
|
||||
const nurLesen = !LEITUNG.has(ich.rolle) && !darfHierAnlegen;
|
||||
/* WER HIER UEBERHAUPT SEIN DARF (berichtigt 22.09.2026).
|
||||
------------------------------------------------------------------
|
||||
Hier stand `!LEITUNG.has(rolle) && !nurLesen`. In dem Moment, in
|
||||
dem die rechte Hand anlegen durfte, wurde `nurLesen` bei ihr
|
||||
falsch -- und diese Zeile warf sie auf die Startseite. Die Seite
|
||||
ging fuer sie einfach nicht auf, ohne Meldung, ohne Grund.
|
||||
|
||||
Jetzt darf hier bleiben, wer die Seite verwaltet, wer sie liest
|
||||
ODER wer darauf jemanden anlegt. Die echte Schranke steht
|
||||
ohnehin am Server; diese Zeile erspart nur eine leere Seite. */
|
||||
if (!LEITUNG.has(ich.rolle) && !nurLesen && !darfHierAnlegen) {
|
||||
location.assign('/workspace/start.html'); return;
|
||||
}
|
||||
window.werZeigen?.(ich);
|
||||
@@ -1271,8 +1327,19 @@ Der Code gilt einmal fuer die `
|
||||
"anlegen, nicht verwalten". Deshalb steht hier die Rolle und
|
||||
nicht die Leitung. */
|
||||
const liste = $('liste');
|
||||
if (ich.rolle === 'spicy') {
|
||||
document.body.dataset.nurLesen = 'ja';
|
||||
/* WER DIE LISTE AUCH BEKOMMT.
|
||||
----------------------------------------------------------------
|
||||
Spicy Media seit dem 07.09., die rechte Hand seit dem
|
||||
22.09.2026: Sie muss sehen, wen es schon gibt -- sonst legt sie
|
||||
jemanden zweimal an. Der Manager bekommt sie weiterhin nicht;
|
||||
fuer ihn gilt unveraendert "anlegen, nicht verwalten".
|
||||
|
||||
DIE ECHTE SCHRANKE STEHT AM SERVER (workspace-personen.js,
|
||||
`nurAdmin`). Diese Zeile entscheidet nur, ob ueberhaupt gefragt
|
||||
wird -- wer hier faelschlich stuende, bekaeme eine leere Liste
|
||||
und keinen Zugang. */
|
||||
if (ich.rolle === 'spicy' || ich.rolle === 'hand') {
|
||||
if (ich.rolle === 'spicy') document.body.dataset.nurLesen = 'ja';
|
||||
laden();
|
||||
} else if (liste) {
|
||||
/* Fuer alle anderen hoert die Liste auf zu laden. Sie steht mit
|
||||
|
||||
Reference in New Issue
Block a user