Dateien: Hochladen nur fuer Management und Scouts

Wunsch vom 28.08.2026: "die dateien sollen nur die manager oder scout
hochladen koennen aber nicht die creator."

Serverseitig ueber DARF_HOCHLADEN. Die Pruefung steht bewusst VOR
express.raw -- wer nicht darf, wird abgewiesen, bevor auch nur ein Byte
entgegengenommen wird. Sonst wanderten bis zu 25 MB durch die Leitung,
nur um danach verworfen zu werden.

Ein Creator sieht und oeffnet weiterhin die Dateien seines Bereichs.
Statt des Ablegefeldes steht dort jetzt, warum es fehlt -- ein einfach
verschwundenes Feld wirkt wie ein Fehler.

Geprueft: Management 201, Scout 201, Creator 403 mit klarer Meldung;
Creator sieht und laedt weiterhin.

--------------------------------------------------------------------
Dabei ein Fehler aufgefallen, der mehrere Seiten betraf:

Das hidden-Attribut blendet nur ueber eine sehr schwache Browserregel
aus -- JEDE eigene display-Angabe schlaegt sie. Betroffen waren:
  * das Ablegefeld fuer Dateien (display: grid) -> ein Creator sah es
    trotz hidden weiterhin
  * die Verwaltungsfelder "Plan-Start" und "Naechster Review" im
    Creator-Profil (ebenfalls grid) -> ein Creator sah sie ebenfalls
  * der Zurueck-Knopf (inline-flex) -> waere vor dem Laden des Skripts
    kurz sichtbar gewesen

Behoben mit einer Regel in gate.css: [hidden] { display: none !important }

Beim Profil waren nie Daten betroffen -- der Server schickt die Felder
an einen Creator gar nicht erst mit, sie waren leer. Sichtbar sein
sollten sie trotzdem nicht.

Aufgefallen ist es erst im Screenshot. Der vorige Test hatte auf das
hidden-ATTRIBUT geprueft, und das war ja gesetzt. Die Pruefung schaut
jetzt auf die tatsaechliche Sichtbarkeit (isVisible).

Ausserdem: In der Regex zum Saeubern von Dateinamen standen die
Steuerzeichen als rohe Bytes statt als Escape-Sequenz. Die Funktion
arbeitete korrekt, aber die Datei galt dadurch als binaer -- grep
verweigerte sie, und Editoren haetten sie zerstoeren koennen. Jetzt
steht dort \x00-\x1f als Text.
This commit is contained in:
2026-08-28 01:25:53 +02:00
parent 81b51ab94f
commit 516a003dc8
5 changed files with 37 additions and 0 deletions
Binary file not shown.
+11
View File
@@ -102,3 +102,14 @@
.datei { grid-template-columns: 34px 1fr; }
.datei__knoepfe { grid-row: auto; grid-column: 1 / -1; margin-top: 9px; }
}
/* Hinweis statt Ablegefeld, wenn jemand nicht hochladen darf. */
.nur-lesen {
margin: 0 0 22px; padding: 15px 18px;
background: rgba(255, 255, 255, .03);
border: 1px solid var(--rand);
border-left: 3px solid var(--akzent);
border-radius: var(--radius-klein);
font-size: .88rem; color: var(--text-leise); line-height: 1.5;
}
.nur-lesen strong { color: var(--text); }
+9
View File
@@ -46,6 +46,15 @@ option {
color: var(--text);
}
/* WICHTIG. Das hidden-Attribut blendet ein Element nur über eine sehr
schwache Browserregel aus -- JEDE eigene display-Angabe schlägt sie.
Ohne diese Zeile blieben Elemente sichtbar, die per JavaScript
ausgeblendet wurden: das Ablegefeld für Dateien (display: grid) und
die Verwaltungsfelder im Creator-Profil (ebenfalls grid). Aufgefallen
erst im Screenshot -- eine Prüfung auf das Attribut allein hätte den
Fehler nie gezeigt, denn gesetzt war es ja. */
[hidden] { display: none !important; }
body.gate {
margin: 0;
min-height: 100svh;
+9
View File
@@ -216,6 +216,15 @@
} catch { return; }
$('wer').textContent = ich.name + ' · ' + ich.rolle;
/* Creator laden nichts hoch (Wunsch 28.08.2026). Das Ablegefeld
verschwindet, stattdessen steht dort, warum -- ein einfach
fehlendes Feld wirkt wie ein Fehler. Der Server weist einen
Versuch ohnehin ab; das hier ist nur die Anzeige. */
if (ich.rolle === 'creator') {
$('ablage').hidden = true;
$('nur-lesen').hidden = false;
}
if (ich.rolle === 'admin') {
$('zuordnung').hidden = false;
try {
+8
View File
@@ -39,6 +39,14 @@
</div>
</section>
<!-- Hinweis für alle, die nicht ablegen dürfen (Creator). Steht statt
des Ablegefeldes, damit klar ist warum -- ein einfach fehlendes
Feld wirkt wie ein Fehler. -->
<p class="nur-lesen" id="nur-lesen" hidden>
Hier siehst du die Dateien deines Bereichs. <strong>Abgelegt werden sie
vom Management oder von Scouts</strong> – du kannst sie öffnen, aber nichts hochladen.
</p>
<!-- Ablegefeld. Klick öffnet die Dateiauswahl, Ziehen funktioniert
ebenso -- beides landet im selben Ablauf. -->
<div class="ablage" id="ablage" tabindex="0" role="button"