From 516a003dc8cdb1e9f98cee10354b16cec3aba66d Mon Sep 17 00:00:00 2001 From: Dogfather Date: Fri, 28 Aug 2026 01:25:53 +0200 Subject: [PATCH] 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. --- server/workspace-dateien.js | Bin 13536 -> 14446 bytes workspace/assets/css/dateien.css | 11 +++++++++++ workspace/assets/css/gate.css | 9 +++++++++ workspace/assets/js/dateien.js | 9 +++++++++ workspace/dateien.html | 8 ++++++++ 5 files changed, 37 insertions(+) diff --git a/server/workspace-dateien.js b/server/workspace-dateien.js index 745a476629168ded9a07d359f4b47d9461f536f0..f0463f9240445ea0cb82f724f6ee8c0176df03e5 100644 GIT binary patch delta 1011 zcmY*Y%Wl&^6kV{WT8Tv$AQlz6WPy^(bwdQGDnh6)6ht3V19U-AHIA?2q0UU0M;wBx zd_=y0Ei0t5fKT8r_yWY19cSEBrIsbj_PytxbMBd6^7r8Dm$}L6G99s@ZQ)q5B9Ro_ z!!s2oi)qWSaN3aYHZ`8Rr-kh1wEtqO{fg>GURk^ib$@|~T5EB0Ep9bij~naMkxZ6z z;CPi%A<}?|Z;40ZvjWE1Kw>VZvrLWv&tSvk@vm=3j~PFH(p zV_IHa=xSvhZEqYtKWQIqwRbnRclPNiDK4qQuKu`e7SB^&yvZ-F&4VH8q=Z+FCy#@N4gG1uc0Gw@XM7dr$roh}$uDkh69~_IQ zlqL-#f}m2eWfcKtSa}GulsCju(dI|T6x39X5XAL@?YMP+0<9HJ9Dp_y%2Xzb!cr;1 zi^K0kS{i$5J)*r$O1%Me@OPJ`^QsqBb9^6LRHB;)m?4`|n+&aJyKuO&FY~JFBrFXJ zZ&zY=;C|ikhln5;P&{%C`UDV}QT^U^r{i4MP#X`}Sgm5Ci-H@Wd@63;nV#IA-wV@m zWtn)5^+KE@z2_XKDro+E|h0B0&f$YT|#kaTvt? z*(sSAKp8%D#I8ggIDpy}Qb>C^J@EfRI!>BQ9Ez@G98pO)7X`K)k<|zSldMiyWh1@R kYRm();rnY&*z`og$sNoZ{5Ucf_R4l8aIkOY)19 oG!?436rcbq=9!{kt5B3$s8^6$RGgoumziP>RZ_e8tmHyD0O^e(FaQ7m diff --git a/workspace/assets/css/dateien.css b/workspace/assets/css/dateien.css index 9ae2a6b9..b36295ab 100644 --- a/workspace/assets/css/dateien.css +++ b/workspace/assets/css/dateien.css @@ -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); } diff --git a/workspace/assets/css/gate.css b/workspace/assets/css/gate.css index 4d351692..e3967bce 100644 --- a/workspace/assets/css/gate.css +++ b/workspace/assets/css/gate.css @@ -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; diff --git a/workspace/assets/js/dateien.js b/workspace/assets/js/dateien.js index 3b0908d1..6b0b7504 100644 --- a/workspace/assets/js/dateien.js +++ b/workspace/assets/js/dateien.js @@ -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 { diff --git a/workspace/dateien.html b/workspace/dateien.html index 95d7db95..5543e799 100644 --- a/workspace/dateien.html +++ b/workspace/dateien.html @@ -39,6 +39,14 @@ + + +