test(auth): Gruppenisolation absichern, Doku zum Rechtemodell

AccessControlTest prueft die Trennung ueber die echte Kette
Auth -> AccessPolicy -> Repository, also genau so, wie die
Controller sie benutzen - nicht gegen eine nachgebaute Logik.
Abgedeckt sind unter anderem: ein Mitglied sieht nur die eigene
Gruppe, der direkte Aufruf einer fremden Kennung findet nichts,
ein Benutzer ohne Gruppe sieht gar nichts (die leere Liste darf
nicht wie "keine Einschraenkung" wirken), Viewer duerfen lesen
aber nicht schreiben, das Umhaengen einer Domain nimmt ihre
Kurzlinks mit, fremde Logos werden nicht ausgeliefert, ein
gesperrtes Konto verliert seine laufende Sitzung und ein
Passwortwechsel macht bestehende Sitzungen ungueltig.

MigrationUpgradeTest deckt zusaetzlich den Umstieg ab: das
Bestandskonto wird mit unveraendertem Hash uebernommen, die alten
settings-Schluessel verschwinden, Bestandsdomains landen in der
Standardgruppe - und eine frische Installation bekommt kein
erfundenes Konto.

README: neuer Abschnitt "Benutzer, Gruppen und Rechte" mit dem
Grundprinzip, den beiden Rollenebenen, der Einrichtung in drei
Schritten und dem Umstieg von der Einbenutzer-Version.
ADMIN_USER und ADMIN_PASSWORD_HASH sind als Notfallzugang neu
beschrieben, in README und .env.example.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-14 12:03:41 +02:00
co-authored by Claude Opus 5
parent 7f52613821
commit 85b9576b38
4 changed files with 609 additions and 30 deletions
+15 -6
View File
@@ -37,13 +37,22 @@ DB_USER=urlshort
DB_PASSWORD=
DB_CHARSET=utf8mb4
# --- Admin-Zugang ---------------------------------------------
ADMIN_USER=admin
# bcrypt-Hash des Passworts. Leer lassen -> beim ersten Aufruf startet
# der Setup-Assistent. Dieser verlangt zusaetzlich ein Einmal-Token,
# das in data/setup-token.txt steht (und im Serverprotokoll), damit
# niemand anderes die frische Installation uebernehmen kann.
# --- Notfallzugang --------------------------------------------
# Die regulaeren Konten stehen in der Datenbank und werden unter
# "Benutzer" verwaltet. Das erste Konto legt der Setup-Assistent beim
# ersten Aufruf an; er verlangt zusaetzlich ein Einmal-Token aus
# data/setup-token.txt (und dem Serverprotokoll), damit niemand anderes
# die frische Installation uebernimmt.
#
# Die beiden folgenden Zeilen sind davon unabhaengig: sie beschreiben
# einen zusaetzlichen Zugang mit Administratorrechten, der nur hier
# steht. Er taucht in der Benutzerverwaltung nicht auf und laesst sich
# dort auch nicht aendern - gedacht fuer den Fall, dass das letzte
# Administratorkonto gesperrt wurde oder sein Passwort verloren ging.
# Wird er nicht gebraucht, beide Zeilen leer lassen oder entfernen.
#
# Hash erzeugen: php -r "echo password_hash('geheim', PASSWORD_DEFAULT), PHP_EOL;"
ADMIN_USER=admin
ADMIN_PASSWORD_HASH=
# --- Sessions / Sicherheit ------------------------------------