Moonphase geht nun wieder
This commit is contained in:
@@ -1,5 +0,0 @@
|
|||||||
# Rechtesystem
|
|
||||||
|
|
||||||
Die Anleitung liegt jetzt unter:
|
|
||||||
|
|
||||||
- [docs/README_RECHTESYSTEM.md](/c:/Users/ich/source/repos/skyview.astronomiemuseum.de/docs/README_RECHTESYSTEM.md)
|
|
||||||
+2
-170
@@ -1,173 +1,5 @@
|
|||||||
# Rechtesystem
|
# Rechtesystem
|
||||||
|
|
||||||
Diese Anleitung beschreibt das aktuelle Rechtesystem für die Seiten unter `public/`.
|
Die Anleitung liegt jetzt unter:
|
||||||
|
|
||||||
## Grundidee
|
- [docs/README_RECHTESYSTEM.md](/c:/Users/ich/source/repos/skyview.astronomiemuseum.de/docs/README_RECHTESYSTEM.md)
|
||||||
|
|
||||||
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.
|
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
@echo off
|
||||||
|
cd /d "C:\Users\HP\source\repos\skyview.astronomiemuseum.de"
|
||||||
|
echo Starte PHP-Entwicklungsserver auf http://127.0.0.1:8000/
|
||||||
|
echo Beenden mit Ctrl+C
|
||||||
|
"E:\php\php.exe" -S 127.0.0.1:8000 -t public
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
@echo off
|
||||||
|
cd /d "C:\Users\ich\source\repos\skyview.astronomiemuseum.de"
|
||||||
|
echo Starte PHP-Entwicklungsserver auf http://127.0.0.1:8000/
|
||||||
|
echo Beenden mit Ctrl+C
|
||||||
|
"C:\laragon\bin\php\php-8.4.5-nts-Win32-vs17-x64\php.exe" -S 127.0.0.1:8000 -t public
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 40 MiB After Width: | Height: | Size: 12 MiB |
Binary file not shown.
|
After Width: | Height: | Size: 40 MiB |
+15
-6
@@ -619,6 +619,9 @@ async function loadHdTextures() {
|
|||||||
// Scene neu aufbauen mit den HD-Blob-URLs
|
// Scene neu aufbauen mit den HD-Blob-URLs
|
||||||
await buildMoonSceneFromUrls(url1, url2);
|
await buildMoonSceneFromUrls(url1, url2);
|
||||||
|
|
||||||
|
// Canvas wurde in destroyMoonScene() ersetzt → Listener neu anhängen
|
||||||
|
attachCanvasListeners();
|
||||||
|
|
||||||
hdTexturesLoaded = true;
|
hdTexturesLoaded = true;
|
||||||
hdTexturesLoading = false;
|
hdTexturesLoading = false;
|
||||||
hdTextureBtn.textContent = 'HD!';
|
hdTextureBtn.textContent = 'HD!';
|
||||||
@@ -1728,7 +1731,7 @@ playbackSpeedGroup.addEventListener('click', event => {
|
|||||||
item.classList.toggle('is-active', item === button);
|
item.classList.toggle('is-active', item === button);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
moonCanvas.addEventListener('wheel', event => {
|
function onMoonCanvasWheel(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
const zoomDelta = event.deltaY > 0 ? -0.1 : 0.1;
|
const zoomDelta = event.deltaY > 0 ? -0.1 : 0.1;
|
||||||
const nextZoom = THREE.MathUtils.clamp(moonZoom + zoomDelta, MOON_ZOOM_MIN, MOON_ZOOM_MAX);
|
const nextZoom = THREE.MathUtils.clamp(moonZoom + zoomDelta, MOON_ZOOM_MIN, MOON_ZOOM_MAX);
|
||||||
@@ -1737,11 +1740,17 @@ moonCanvas.addEventListener('wheel', event => {
|
|||||||
moonZoom = nextZoom;
|
moonZoom = nextZoom;
|
||||||
updateMoon();
|
updateMoon();
|
||||||
}
|
}
|
||||||
}, { passive: false });
|
}
|
||||||
moonCanvas.addEventListener('pointerdown', beginMoonDrag);
|
|
||||||
moonCanvas.addEventListener('pointermove', updateMoonDrag);
|
function attachCanvasListeners() {
|
||||||
moonCanvas.addEventListener('pointerup', endMoonDrag);
|
moonCanvas.addEventListener('wheel', onMoonCanvasWheel, { passive: false });
|
||||||
moonCanvas.addEventListener('pointercancel', endMoonDrag);
|
moonCanvas.addEventListener('pointerdown', beginMoonDrag);
|
||||||
|
moonCanvas.addEventListener('pointermove', updateMoonDrag);
|
||||||
|
moonCanvas.addEventListener('pointerup', endMoonDrag);
|
||||||
|
moonCanvas.addEventListener('pointercancel', endMoonDrag);
|
||||||
|
}
|
||||||
|
|
||||||
|
attachCanvasListeners();
|
||||||
window.addEventListener('resize', () => {
|
window.addEventListener('resize', () => {
|
||||||
resizeMoonScene();
|
resizeMoonScene();
|
||||||
updateMoon();
|
updateMoon();
|
||||||
|
|||||||
Reference in New Issue
Block a user