Files
skyview.astronomiemuseum.de/README_RECHTESYSTEM.md
T
2026-04-05 11:19:20 +02:00

5.2 KiB

Rechtesystem

Diese Anleitung beschreibt das aktuelle Rechtesystem fuer die Seiten unter public/.

Grundidee

Aktuell gilt:

  • admin und master haben Vollzugriff auf alle Seiten unter public/
  • normale Benutzer sehen standardmaessig keine geschuetzten Seiten
  • einzelne Seiten koennen pro Benutzer durch einen master freigegeben werden
  • das Header-Menue passt sich an die hinterlegten Seitenrechte an

Rollen

Es gibt zurzeit diese Rollen:

  • user Normale Benutzerrolle ohne automatischen Zugriff auf die geschuetzten Seiten
  • admin Vollzugriff auf alle Seiten unter public/
  • master Vollzugriff auf alle Seiten unter public/ plus Verwaltung der Seitenfreigaben anderer Benutzer

Die Rollen-Helfer liegen in auth_helpers.php.

Zentrale Logik

Die zentrale Rechtebasis besteht aus drei Bausteinen:

  • auth_helpers.php Enthält Rollen-Helfer, Allowlist und die Liste der freigebbaren Seiten
  • header.php Prueft beim Aufruf einer Seite den Zugriff und baut das Menue passend zu den Rechten
  • admin_users.php Enthält die Benutzerverwaltung und die Seitenmatrix fuer master

Datenbank

Fuer die Seitenfreigaben wird diese Tabelle verwendet:

  • app_user_page_permissions

Wichtige Spalten:

  • user_id
  • page_key

page_key entspricht dem relativen Seitenpfad unter public/, zum Beispiel:

  • moonphase.php
  • tcrb_lightcurve.php
  • geocron/index.php

Wichtig:

  • Nicht nur der Dateiname zaehlt.
  • Unterordner-Seiten werden mit vollem relativen Pfad gespeichert.

Oeffentliche Ausnahmen

Einige Seiten bleiben ohne Seitenfreigabe erreichbar. Diese stehen in der Allowlist in auth_helpers.php:

  • login.php
  • register.php
  • logout.php

Wie der Zugriff geprueft wird

Beim Laden einer Seite mit gemeinsamem Header passiert Folgendes:

  1. header.php ermittelt den aktuellen page_key
  2. Wenn der Benutzer admin oder master ist, ist der Zugriff erlaubt
  3. Wenn die Seite in der Allowlist steht, ist der Zugriff erlaubt
  4. Sonst wird in app_user_page_permissions geprueft, ob der Benutzer genau diese Seite sehen darf
  5. Wenn nein, kommt 403 Zugriff verweigert

Wichtig:

  • Eine einzelne Seitenfreigabe macht den Benutzer nicht zu admin
  • dadurch bleibt das Menue auf seine wirklich erlaubten Seiten beschraenkt

Wie das Menue funktioniert

Das Header-Menue wird ebenfalls in header.php aufgebaut.

Dabei gilt:

  • admin und master sehen das volle Menue
  • normale Benutzer sehen nur die Menuepunkte, deren href in ihren Seitenfreigaben vorhanden ist
  • auch der Kontobereich unten im Menue wird entsprechend gefiltert

Damit das funktioniert, muessen Menuelink und page_key exakt zusammenpassen.

Beispiel:

  • Menuelink: geocron/index.php
  • Datenbankeintrag: geocron/index.php

Wie ein Master Seiten freigibt

Die Freigaben werden in admin_users.php verwaltet.

Ablauf:

  1. Als master anmelden
  2. Benutzerverwaltung oeffnen
  3. Im Bereich Seitenfreigaben den gewuenschten Benutzer waehlen
  4. Haken bei den erlaubten Seiten setzen
  5. Speichern

Besonderheiten:

  • admin und master brauchen keine Einzelhaken, weil ihre Rolle bereits Vollzugriff gibt
  • nur ein master darf Seitenfreigaben bearbeiten

Wo die freigebaren Seiten definiert sind

Die Liste der freigebaren Seiten steht zentral in auth_helpers.php in:

  • manageablePublicPages()

Nur Seiten, die dort eingetragen sind, koennen:

  • in der Matrix erscheinen
  • einzeln fuer Benutzer freigegeben werden
  • sauber im Menue gefiltert werden

Neue Seite ins Rechtesystem aufnehmen

Wenn eine neue Seite unter public/ dazukommt, sind in der Regel diese Schritte noetig:

  1. Seite anlegen
  2. Seite so bauen, dass sie den gemeinsamen Header nutzt
  3. In manageablePublicPages() eintragen
  4. Falls noetig als Menuepunkt in header.php eintragen
  5. Darauf achten, dass href und page_key exakt gleich sind

Beispiel:

'beispielseite.php' => 'Beispielseite',

Oder fuer Unterordner:

'tools/beispiel.php' => 'Beispielseite',

Wichtige Regel fuer Unterordner

Bei Unterordnern niemals nur index.php verwenden.

Richtig:

  • geocron/index.php

Falsch:

  • index.php

Die Seitenerkennung dafuer macht currentPublicPageKey() in auth_helpers.php.

Aktueller Stand

Der aktuelle Zustand ist bewusst streng:

  • standardmaessig nur admin oder master
  • normale Benutzer nur ueber explizite Seitenfreigaben

Spaeter kann entschieden werden, welche Seiten wieder standardmaessig fuer normale Benutzer sichtbar sein sollen.