Manager legen Creator an -- eine neue Tuer statt eines Schluessels fuer die alte
Filipe: "wieso greift das in die rechte rein? ist doch ok, die sollen einfach paar leute selber hinzufuegen koennen." Er hat recht, und ich hatte zwei Dinge in einen Topf geworfen: Das hier braucht KEINE Datenbankaenderung -- nur die Rolle "Spicy Media" braucht eine. WARUM EIN EIGENER WEG UND NICHT DIE ALTE TUER Alles unter /workspace/api/verwaltung haengt an EINER Schranke (nurAdmin). Dahinter liegen acht Wege: Rollen aendern, Codes neu setzen, sperren, loeschen, Protokoll lesen. Einen Manager dort hineinzulassen und danach in jedem der acht einzeln zu pruefen, was er darf, ist genau die Bauweise, durch die am 31.08.2026 ein Loch entstanden ist -- zwei von drei Stellen abgesichert, die dritte vergessen. Deshalb bleibt die Tuer zu, und daneben steht eine neue mit genau einem Zweck: POST /workspace/api/creator-anlegen. Sie kann nichts anderes, als einen Creator anzulegen -- nicht weil eine Abfrage es verbietet, sondern weil es hier keinen anderen Weg gibt. Unterschied zwischen "darf nicht" und "kann nicht". DIE ROLLE STEHT NICHT IM AUFRUF, sie wird im Server gesetzt. Ein Feld `rolle` im Koerper waere die naheliegende Loesung und die falsche: Dann muesste eine Abfrage sie pruefen, und eine vergessene Abfrage ist ein zweiter Zugang mit vollen Rechten. Geprueft wird deshalb nicht, dass ein mitgeschicktes `rolle: "admin"` abgelehnt wird, sondern dass es WIRKUNGSLOS ist. DIE ZUTEILUNG PASSIERT SOFORT. Ein Creator ohne Betreuung ist fuer alle ausser DogFather unsichtbar -- der Manager haette ihn angelegt und danach nicht mehr gesehen. Wer anlegt, betreut; ein eigener Scout kann mitgegeben werden. Eine FREMDE Scout-Nummer wird abgelehnt (403) und nicht stillschweigend auf den Anleger zurueckgesetzt: Sonst glaubte der Manager, er haette zugeteilt. Der Knopf sitzt auf dem Dashboard, nicht in der Personenverwaltung -- dort kommt ein Manager gar nicht hinein, und hier sieht er seine Creator ohnehin. Der Zugangscode steht einmal im Dialog und wird nie nachgeladen; deshalb schliesst sich das Fenster NICHT von selbst. pruef-creator-anlegen.mjs, 29 Pruefungen, alle gruen -- und die Haelfte davon prueft, was NICHT geht: Personenverwaltung 404 fuer Manager, Scout und Creator kommen gar nicht erst durch, fremder Scout 403 (und der Creator wird dabei gar nicht erst angelegt), erfundene Nummer 403. Zwei Manager mit je einem eigenen Scout, weil sich "nur die eigenen" mit nur einem Manager gar nicht pruefen laesst. Nebenbei: .feld-hinweis ist von bereich.css nach aufgaben.css gewandert (zu den uebrigen Formularstilen) -- ein Formularbaustein in der Bereichsdatei ist nur so lange richtig, wie ihn keine zweite Seite braucht. Gruen: creator-anlegen (29), personen-liste (33), css-klassen (15), struktur (32), formulare (19). Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -9,9 +9,12 @@
|
||||
<meta name="theme-color" content="#0674b9" />
|
||||
<link rel="icon" type="image/png" href="/assets/img/app-symbole/workspace-32.png" />
|
||||
<link rel="apple-touch-icon" href="/assets/img/app-symbole/workspace-180.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609070414" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609070414" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609070414" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609070423" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609070423" />
|
||||
<!-- Formular- und Dialogstile: seit dem 07.09.2026 steht hier der
|
||||
Dialog "Creator anlegen". -->
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609070423" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609070423" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -45,10 +48,61 @@
|
||||
Eine Karte je Creator – mit einem Blick sehen, wo es hakt und wo es läuft.
|
||||
</p>
|
||||
</div>
|
||||
<!-- Der Knopf steht HIER und nicht in der Personenverwaltung
|
||||
(07.09.2026). Ein Manager kommt dort gar nicht hinein, und er
|
||||
soll es auch nicht -- dahinter liegen Rollen, Codes, Sperren und
|
||||
das Protokoll. Hier dagegen sieht er ohnehin seine Creator; der
|
||||
neue erscheint eine Zeile weiter unten. Das Skript blendet den
|
||||
Knopf für Scouts und Creator aus, der Server lässt sie ohnehin
|
||||
nicht durch. -->
|
||||
<button type="button" class="knopf knopf--klein" id="creator-neu" hidden>Creator anlegen</button>
|
||||
</section>
|
||||
|
||||
<p class="fehler" id="fehler" role="alert" aria-live="polite"></p>
|
||||
|
||||
<!-- Creator anlegen. Derselbe Dialog-Aufbau wie überall sonst. -->
|
||||
<dialog class="dialog" id="creator-dialog">
|
||||
<form method="dialog" class="neu neu--blank" id="creator-form">
|
||||
<h2 class="dialog__titel">Creator anlegen</h2>
|
||||
<p class="dialog__unter">
|
||||
Der Zugangscode erscheint genau einmal – danach ist er weg und
|
||||
kann nur neu gesetzt werden.
|
||||
</p>
|
||||
|
||||
<div class="neu__zeile">
|
||||
<label class="feld-schild" for="cn-name">Name</label>
|
||||
<input id="cn-name" maxlength="60" required autocomplete="off" />
|
||||
</div>
|
||||
|
||||
<div class="neu__zeile" id="cn-scout-zeile" hidden>
|
||||
<label class="feld-schild" for="cn-scout">Betreuung</label>
|
||||
<select id="cn-scout"></select>
|
||||
<p class="feld-hinweis">
|
||||
Ohne Auswahl betreust du ihn selbst. Zur Auswahl stehen nur
|
||||
deine eigenen Scouts.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Der Code. Steht erst nach dem Anlegen da und wird nie
|
||||
nachgeladen -- die Seite ist die einzige Stelle, an der er je
|
||||
zu sehen ist. -->
|
||||
<div class="neu__zeile" id="cn-code-zeile" hidden>
|
||||
<p class="feld-schild">Zugangscode für <span id="cn-code-name"></span></p>
|
||||
<p class="code-anzeige" id="cn-code"></p>
|
||||
<p class="feld-hinweis">
|
||||
Jetzt weitergeben. Nach dem Schließen ist er nicht mehr abrufbar.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p class="fehler" id="cn-fehler" role="alert" aria-live="polite"></p>
|
||||
|
||||
<div class="dialog__knoepfe">
|
||||
<button type="submit" class="knopf knopf--klein" id="cn-speichern">Anlegen</button>
|
||||
<button type="button" class="abmelden" id="cn-zu">Schließen</button>
|
||||
</div>
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<!-- FRÜHWARNUNG (06.09.2026).
|
||||
|
||||
Steht GANZ OBEN, noch vor den Summen. Die Summen beantworten "wie
|
||||
@@ -82,10 +136,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609070414" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609070423" defer></script>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202609070414" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609070414" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609070414" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609070423" defer></script>
|
||||
<script src="assets/js/glocke.js?v=202609070423" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609070423" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user