Moonphase geht nun wieder

This commit is contained in:
Eskimue
2026-04-07 13:10:44 +02:00
parent 11cf0ae0dd
commit da011d41e5
7 changed files with 27 additions and 181 deletions
+2 -170
View File
@@ -1,173 +1,5 @@
# Rechtesystem
Diese Anleitung beschreibt das aktuelle Rechtesystem für die Seiten unter `public/`.
Die Anleitung liegt jetzt unter:
## Grundidee
Aktuell gilt:
- `admin` und `master` haben Vollzugriff auf alle Seiten unter `public/`
- normale Benutzer sehen standardmäßig keine geschützten Seiten
- einzelne Seiten können pro Benutzer durch einen `master` freigegeben werden
- das Header-Menü passt sich an die hinterlegten Seitenrechte an
## Rollen
Es gibt zurzeit diese Rollen:
- `user`
Normale Benutzerrolle ohne automatischen Zugriff auf die geschützten 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 [`public/auth_helpers.php`](../public/auth_helpers.php).
## Zentrale Logik
Die zentrale Rechtebasis besteht aus drei Bausteinen:
- [`public/auth_helpers.php`](../public/auth_helpers.php)
Enthält Rollen-Helfer, Allowlist und die Liste der freigebbaren Seiten
- [`public/header.php`](../public/header.php)
Prüft beim Aufruf einer Seite den Zugriff und baut das Menü passend zu den Rechten
- [`public/admin_users.php`](../public/admin_users.php)
Enthält die Benutzerverwaltung und die Seitenmatrix für `master`
## Datenbank
Für 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 zählt.
- Unterordner-Seiten werden mit vollem relativen Pfad gespeichert.
## Öffentliche Ausnahmen
Einige Seiten bleiben ohne Seitenfreigabe erreichbar. Diese stehen in der Allowlist in [`public/auth_helpers.php`](../public/auth_helpers.php):
- `login.php`
- `register.php`
- `logout.php`
## Wie der Zugriff geprüft 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` geprüft, 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 Menü auf seine wirklich erlaubten Seiten beschränkt
## Wie das Menü funktioniert
Das Header-Menü wird ebenfalls in [`public/header.php`](../public/header.php) aufgebaut.
Dabei gilt:
- ausgeloggte Besucher sehen nur `Anmelden` und `Registrieren`
- `admin` und `master` sehen das volle Menü
- normale Benutzer sehen nur die Menüpunkte, deren `href` in ihren Seitenfreigaben vorhanden ist
- auch der Kontobereich unten im Menü wird entsprechend gefiltert
Damit das funktioniert, müssen Menülink und `page_key` exakt zusammenpassen.
Beispiel:
- Menülink: `geocron/index.php`
- Datenbankeintrag: `geocron/index.php`
## Wie ein Master Seiten freigibt
Die Freigaben werden in [`public/admin_users.php`](../public/admin_users.php) verwaltet.
Ablauf:
1. Als `master` anmelden
2. `Benutzerverwaltung` öffnen
3. Im Bereich `Seitenfreigaben` den gewünschten Benutzer wählen
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 [`public/auth_helpers.php`](../public/auth_helpers.php) in:
- `manageablePublicPages()`
Nur Seiten, die dort eingetragen sind, können:
- in der Matrix erscheinen
- einzeln für Benutzer freigegeben werden
- sauber im Menü gefiltert werden
## Neue Seite ins Rechtesystem aufnehmen
Wenn eine neue Seite unter `public/` dazukommt, sind in der Regel diese Schritte nötig:
1. Seite anlegen
2. Seite so bauen, dass sie den gemeinsamen Header nutzt
3. In `manageablePublicPages()` eintragen
4. Falls nötig als Menüpunkt in [`public/header.php`](../public/header.php) eintragen
5. Darauf achten, dass `href` und `page_key` exakt gleich sind
Beispiel:
```php
'beispielseite.php' => 'Beispielseite',
```
Oder für Unterordner:
```php
'tools/beispiel.php' => 'Beispielseite',
```
## Wichtige Regel für Unterordner
Bei Unterordnern niemals nur `index.php` verwenden.
Richtig:
- `geocron/index.php`
Falsch:
- `index.php`
Die Seitenerkennung dafür macht `currentPublicPageKey()` in [`public/auth_helpers.php`](../public/auth_helpers.php).
## Aktueller Stand
Der aktuelle Zustand ist bewusst streng:
- standardmäßig nur `admin` oder `master`
- normale Benutzer nur über explizite Seitenfreigaben
Später kann entschieden werden, welche Seiten wieder standardmäßig für normale Benutzer sichtbar sein sollen.
- [docs/README_RECHTESYSTEM.md](/c:/Users/ich/source/repos/skyview.astronomiemuseum.de/docs/README_RECHTESYSTEM.md)