174 lines
4.8 KiB
Markdown
174 lines
4.8 KiB
Markdown
# 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 [`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)
|
|
Enthaelt Rollen-Helfer, Allowlist und die Liste der freigebbaren Seiten
|
|
- [`public/header.php`](../public/header.php)
|
|
Prueft beim Aufruf einer Seite den Zugriff und baut das Menue passend zu den Rechten
|
|
- [`public/admin_users.php`](../public/admin_users.php)
|
|
Enthaelt 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 [`public/auth_helpers.php`](../public/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 [`public/header.php`](../public/header.php) aufgebaut.
|
|
|
|
Dabei gilt:
|
|
|
|
- ausgeloggte Besucher sehen nur `Anmelden` und `Registrieren`
|
|
- `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 [`public/admin_users.php`](../public/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 [`public/auth_helpers.php`](../public/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 [`public/header.php`](../public/header.php) eintragen
|
|
5. Darauf achten, dass `href` und `page_key` exakt gleich sind
|
|
|
|
Beispiel:
|
|
|
|
```php
|
|
'beispielseite.php' => 'Beispielseite',
|
|
```
|
|
|
|
Oder fuer Unterordner:
|
|
|
|
```php
|
|
'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 [`public/auth_helpers.php`](../public/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.
|