Rechtesystem und Readmes überarbeitet

This commit is contained in:
2026-04-05 11:35:45 +02:00
parent eb35501712
commit 31c9612cc5
6 changed files with 222 additions and 34 deletions
+16
View File
@@ -0,0 +1,16 @@
# Dokumentation
Hier liegen die internen Anleitungen und technischen Hilfen fuer das Projekt.
## Verfuegbar
- [`docs/README_PROJEKT.md`](README_PROJEKT.md)
Grundsaetzliche Erklaerung der Website, ihrer Bereiche und Datenfluesse
- [`docs/README_LOCAL_WEBSERVER.md`](README_LOCAL_WEBSERVER.md)
Lokale Startanleitung fuer den PHP-Webserver auf den bekannten Arbeitsplaetzen
- [`docs/README_RECHTESYSTEM.md`](README_RECHTESYSTEM.md)
Beschreibung des aktuellen Rollen- und Seitenrechtesystems
## Hinweis
Die bisherigen Dateien im Projekt-Root bleiben als kurze Verweise bestehen, damit bestehende Hinweise nicht sofort kaputtgehen.
+83
View File
@@ -0,0 +1,83 @@
# Lokaler PHP-Webserver
Diese Anleitung enthaelt die lokalen Startbefehle fuer mehrere Rechner.
## ARBEITSPLATZTM
### PHP-Pfad
`E:\php\php.exe`
### Projektverzeichnis
`C:\Users\HP\source\repos\skyview.astronomiemuseum.de`
### Document-Root
`C:\Users\HP\source\repos\skyview.astronomiemuseum.de\public`
### Server starten
```powershell
Set-Location C:\Users\HP\source\repos\skyview.astronomiemuseum.de
& 'E:\php\php.exe' -S 127.0.0.1:8000 -t public
```
Dann ist das Projekt unter folgender URL erreichbar:
`http://127.0.0.1:8000/`
### Optional: anderer Port
Wenn Port `8000` bereits belegt ist:
```powershell
Set-Location C:\Users\HP\source\repos\skyview.astronomiemuseum.de
& 'E:\php\php.exe' -S 127.0.0.1:8001 -t public
```
## THOMASDESKTOP
### PHP-Pfad
`C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe`
### Projektverzeichnis
`C:\Users\ich\source\repos\skyview.astronomiemuseum.de`
### Document-Root
`C:\Users\ich\source\repos\skyview.astronomiemuseum.de\public`
### Server starten
```powershell
Set-Location C:\Users\ich\source\repos\skyview.astronomiemuseum.de
& 'C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe' -S 127.0.0.1:8000 -t public
```
Dann ist das Projekt unter folgender URL erreichbar:
`http://127.0.0.1:8000/`
### Optional: anderer Port
Wenn Port `8000` bereits belegt ist:
```powershell
Set-Location C:\Users\ich\source\repos\skyview.astronomiemuseum.de
& 'C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe' -S 127.0.0.1:8001 -t public
```
## Server beenden
Im laufenden Terminal:
```powershell
Ctrl + C
```
## Hinweis
Der Webserver nutzt den eingebauten PHP-Entwicklungsserver und ist fuer lokale Entwicklung gedacht.
+167
View File
@@ -0,0 +1,167 @@
# Projektueberblick
Diese Datei beschreibt die Website grundsaetzlich: Worum es geht, welche Bereiche es gibt und wie die wichtigsten Bausteine zusammenspielen.
## Zweck der Website
`SkyView & AstroTools` ist eine Astronomie-Website des Astronomiemuseums der Sternwarte Sonneberg.
Die Seite verbindet:
- oeffentliche Astronomie-Werkzeuge
- persoenliche Benutzerfunktionen
- Import- und Auswerteprozesse fuer astronomische Daten
- Telegram-Anbindung fuer Benachrichtigungen und Tests
## Hauptbereiche
Die Website besteht im Kern aus vier Bereichen.
## 1. Oeffentliche Astronomie-Seiten
Unter [`public/`](../public) liegen die eigentlichen Seiten der Website.
Typische Inhalte sind:
- Mond und Mondphasen
- Planetensichtbarkeit
- Sternenhimmel
- Meteorstroeme
- Finsternisse und Bedeckungen
- Geocron und Geocron 3D
- Vorhersage-Seiten wie Monats- und Wochenvorhersage
- Spezialseiten wie die T-CrB-Lichtkurve
Diese Seiten nutzen in der Regel den gemeinsamen Header und Footer:
- [`public/header.php`](../public/header.php)
- [`public/footer.php`](../public/footer.php)
## 2. Benutzerkonten
Die Seite besitzt eigene Benutzerkonten mit Login.
Wichtige Konto-Seiten:
- [`public/login.php`](../public/login.php)
- [`public/register.php`](../public/register.php)
- [`public/settings.php`](../public/settings.php)
- [`public/my_favorites.php`](../public/my_favorites.php)
Benutzer koennen dort unter anderem:
- ihr Konto verwalten
- Telegram verbinden
- Standorte verwalten
- Favoriten pflegen
## 3. Rechtesystem
Die Seite hat ein Rollen- und Seitenrechtesystem.
Aktuell gibt es:
- `user`
- `admin`
- `master`
Wichtig:
- `admin` und `master` haben Vollzugriff auf die geschuetzten Seiten
- normale Benutzer erhalten gezielte Seitenfreigaben
- das Header-Menue passt sich an die Seitenrechte an
Die Details dazu stehen in:
- [`docs/README_RECHTESYSTEM.md`](README_RECHTESYSTEM.md)
## 4. Hintergrundprozesse und Datenimporte
Die Website arbeitet nicht nur mit statischen Seiten, sondern auch mit Import- und Cron-Skripten.
Wichtige Skripte liegen unter:
- [`scripts/import/`](../scripts/import)
- [`scripts/telegram/`](../scripts/telegram)
Beispiele:
- [`scripts/import/import_tcrb.php`](../scripts/import/import_tcrb.php)
Importiert AAVSO-WebObs-Daten fuer T CrB
- [`scripts/import/import_celestrak_active.php`](../scripts/import/import_celestrak_active.php)
Importiert Satellitendaten
- [`scripts/telegram/telegram_cron.php`](../scripts/telegram/telegram_cron.php)
Fuehrt Telegram-Aufgaben zeitgesteuert aus
## T CrB
Ein aktueller Spezialbereich ist `T CrB`.
Dazu gehoeren:
- Import der AAVSO-Daten
- Speicherung in der Datenbank
- grafische Darstellung als Lichtkurve
- Telegram-Benachrichtigung zum letzten `V`-Wert
Wichtige Dateien:
- [`scripts/import/import_tcrb.php`](../scripts/import/import_tcrb.php)
- [`public/tcrb_lightcurve.php`](../public/tcrb_lightcurve.php)
- [`scripts/telegram/telegram_cron.php`](../scripts/telegram/telegram_cron.php)
## Telegram
Die Website besitzt eine Telegram-Anbindung.
Damit koennen Benutzer:
- ihr Konto mit Telegram verknuepfen
- spaeter Nachrichten oder Diagramme erhalten
Wichtige Bausteine:
- [`public/settings.php`](../public/settings.php)
- [`public/telegram/connect.php`](../public/telegram/connect.php)
- [`public/telegram/webhook.php`](../public/telegram/webhook.php)
- [`public/telegram/broadcast_test.php`](../public/telegram/broadcast_test.php)
- [`scripts/telegram/telegram_cron.php`](../scripts/telegram/telegram_cron.php)
## Datenfluss grob
Vereinfacht sieht der Ablauf so aus:
1. Import-Skripte holen astronomische Daten aus externen Quellen
2. Die Daten werden in der Datenbank gespeichert
3. Seiten unter `public/` lesen diese Daten aus und stellen sie dar
4. Cron-Skripte koennen daraus Telegram-Nachrichten oder andere Folgeaktionen erzeugen
## Technischer Aufbau
Die Website ist aktuell klassisch in PHP aufgebaut.
Wichtige Verzeichnisse:
- [`public/`](../public)
Webroot und PHP-Seiten
- [`config/`](../config)
Konfigurationen und SQL
- [`scripts/`](../scripts)
Import- und Cron-Skripte
- [`docs/`](.)
Projektdokumentation
## Fuer neue Arbeit an der Seite wichtig
Wenn neue Funktionen dazukommen, sollte man immer an diese Punkte denken:
- braucht die Seite einen Eintrag im Rechtesystem
- soll sie im Header-Menue erscheinen
- braucht sie Datenimport oder Cron
- braucht sie Telegram-Anbindung
- braucht sie Dokumentation in `docs`
## Passende Zusatzdokumente
- [`docs/README_LOCAL_WEBSERVER.md`](README_LOCAL_WEBSERVER.md)
- [`docs/README_RECHTESYSTEM.md`](README_RECHTESYSTEM.md)
+173
View File
@@ -0,0 +1,173 @@
# 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.