Commit Graph
3 Commits
Author SHA1 Message Date
Harlekin cbbc1dceb5 Rollenwechsel in Discord auf beiden Seiten pruefen
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
Der Worker ist die einzige Stelle, an der Discord-Rollen in die Datenbank
kommen. Damit haengt jede Befoerderung, Herabstufung und jeder Rauswurf an
syncMember und enforceMembership - geprueft war davon bisher nur der
vollstaendige Entzug.

Neu abgedeckt: Rollen werden getauscht statt angehaeuft, eine leere
Rollenliste raeumt wirklich alles ab, ein Rueckkehrer wird wieder aktiv,
und ein unveraendertes Mitglied loest keine Meldung aus - sonst wuerfe der
Fuenf-Minuten-Abgleich reihum jeden Zwischenspeicher weg.

Auf der Web-Seite dazu die Gegenrichtung: eine Befoerderung wirkt sofort,
die Stufe kommt aus der hoechsten Rolle und nicht aus der zuletzt
eingetragenen, und eine im Adminbereich geaenderte Rollenzuordnung wirkt
auch dann, wenn sich beim Nutzer selbst keine Zeile aendert.

Der Notify-Test stellt seine Voraussetzung jetzt selbst her. Er erbte die
zu loeschende Zeile von einem frueheren Test und waere still umgefallen,
sobald der etwas anderes tut: ohne Loeschung kein Ausloeser, ohne
Ausloeser keine Meldung.
2026-09-04 14:06:42 +02:00
Harlekin e0b03ea336 Gedankenstriche durch Bindestriche ersetzt
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
2026-09-04 08:54:52 +02:00
Harlekin 79d2cc4753 Entzug greift auch im offenen Ereignisstrom
Nachgesehen, was bei Herabstufung, Rollenentzug, Rauswurf und Austritt
passiert. Für Requests war alles abgedeckt: der Worker löscht die Sitzungen,
ein Trigger verwirft die zwischengespeicherten Rechte, getCurrentUser prüft bei
jedem Request Sitzungszeile, isActive und Mitgliedschaft nach. Die Zeile in der
Datenbank ist der Nachweis, nicht das Cookie - und eine Zeile lässt sich
zurückziehen.

Eine Stelle fiel dabei durch: der Ereignisstrom stellt keine neuen Requests. Er
prüfte einmal beim Verbinden und lief danach mit einer eingefrorenen
Rechtekopie weiter. Wer mit offenem Tab hinausgeworfen wurde, bekam weiter
Chatnachrichten zugestellt, mit vollem Text - jeder Seitenaufruf wäre
abgemeldet gewesen, aber es machte ja keiner mehr einen.

/api/stream löst Sitzung und Rechte jetzt bei jedem Ereignis und bei jedem
Herzschlag neu auf. Ändern sich die Rechte, werden auch die erlaubten Themen
neu bestimmt: ein Ereignis zu einem Verlaufseintrag trägt nur eine Kennung, das
Thema ist dort die einzige Schranke. Ist die Sitzung weg, geht ein revoked
hinaus und die Verbindung wird geschlossen - Schliessen allein genügt nicht,
EventSource baut sofort wieder auf.

Fünf Tests für die Web-Hälfte der Kette; die Discord-Hälfte deckte
worker/tests/mitgliedschaft.test.ts schon ab.
2026-09-03 22:41:52 +02:00