diff --git a/README_RECHTESYSTEM.md b/README_RECHTESYSTEM.md deleted file mode 100644 index d90a174..0000000 --- a/README_RECHTESYSTEM.md +++ /dev/null @@ -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) diff --git a/docs/README_RECHTESYSTEM.md b/docs/README_RECHTESYSTEM.md index c063514..d90a174 100644 --- a/docs/README_RECHTESYSTEM.md +++ b/docs/README_RECHTESYSTEM.md @@ -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) diff --git a/docs/start-server-ARBEITSPLATZTM.bat b/docs/start-server-ARBEITSPLATZTM.bat new file mode 100644 index 0000000..1b04ffa --- /dev/null +++ b/docs/start-server-ARBEITSPLATZTM.bat @@ -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 diff --git a/docs/start-server-THOMASDESKTOP.bat b/docs/start-server-THOMASDESKTOP.bat new file mode 100644 index 0000000..a8ed02c --- /dev/null +++ b/docs/start-server-THOMASDESKTOP.bat @@ -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 diff --git a/public/images/moons/moon_displacement_16bit.jpg b/public/images/moons/moon_displacement_16bit.jpg index 74573c1..52a9ede 100644 Binary files a/public/images/moons/moon_displacement_16bit.jpg and b/public/images/moons/moon_displacement_16bit.jpg differ diff --git a/public/images/moons/moon_displacement_full_16bit.jpg b/public/images/moons/moon_displacement_full_16bit.jpg new file mode 100644 index 0000000..74573c1 Binary files /dev/null and b/public/images/moons/moon_displacement_full_16bit.jpg differ diff --git a/public/moonphase.php b/public/moonphase.php index b4b7b6b..515ab94 100644 --- a/public/moonphase.php +++ b/public/moonphase.php @@ -619,6 +619,9 @@ async function loadHdTextures() { // Scene neu aufbauen mit den HD-Blob-URLs await buildMoonSceneFromUrls(url1, url2); + // Canvas wurde in destroyMoonScene() ersetzt → Listener neu anhängen + attachCanvasListeners(); + hdTexturesLoaded = true; hdTexturesLoading = false; hdTextureBtn.textContent = 'HD!'; @@ -1728,7 +1731,7 @@ playbackSpeedGroup.addEventListener('click', event => { item.classList.toggle('is-active', item === button); }); }); -moonCanvas.addEventListener('wheel', event => { +function onMoonCanvasWheel(event) { event.preventDefault(); const zoomDelta = event.deltaY > 0 ? -0.1 : 0.1; const nextZoom = THREE.MathUtils.clamp(moonZoom + zoomDelta, MOON_ZOOM_MIN, MOON_ZOOM_MAX); @@ -1737,11 +1740,17 @@ moonCanvas.addEventListener('wheel', event => { moonZoom = nextZoom; updateMoon(); } -}, { passive: false }); -moonCanvas.addEventListener('pointerdown', beginMoonDrag); -moonCanvas.addEventListener('pointermove', updateMoonDrag); -moonCanvas.addEventListener('pointerup', endMoonDrag); -moonCanvas.addEventListener('pointercancel', endMoonDrag); +} + +function attachCanvasListeners() { + moonCanvas.addEventListener('wheel', onMoonCanvasWheel, { passive: false }); + moonCanvas.addEventListener('pointerdown', beginMoonDrag); + moonCanvas.addEventListener('pointermove', updateMoonDrag); + moonCanvas.addEventListener('pointerup', endMoonDrag); + moonCanvas.addEventListener('pointercancel', endMoonDrag); +} + +attachCanvasListeners(); window.addEventListener('resize', () => { resizeMoonScene(); updateMoon();