# Admin System ## Überblick Das Admin-System nutzt einen klassischen Session-Login für den Bereich unter `admin/`. - Login-Seite: `admin/login.php` - Admin-Dashboard: `admin/index.php` - Admin-Verwaltung: `admin/settings.php` (zusammen mit Backup und Updates, siehe `docs/BACKUP_UPDATE.md`) - Backend-Helfer: `includes/functions.php` - Persistenz: `data/admins.json` ## Datenmodell (`data/admins.json`) Format: ```json { "admins": { "username": { "password_hash": "$2y$...", "description": "Rolle/Beschreibung", "email": "admin@example.org" } } } ``` Hinweise: - `password_hash` muss ein gültiger Hash für `password_verify()` sein. - `description` ist Pflicht (max. 120 Zeichen). - `email` ist Pflicht und wird für neue Bestell-Benachrichtigungen verwendet. - Ältere Einträge im Legacy-Format (`"username": "$2y$..."`) werden weiterhin gelesen. - Es gibt **keine automatische Migration** mehr beim Lesen. ## Rechte - Jeder eingeloggte Admin darf: - neue Admins anlegen, - Passwörter anderer Admins ändern, - andere Admins löschen, - Beschreibungen bearbeiten. Diese Regeln werden serverseitig geprüft. ## Bedienung in `admin/settings.php` - Tabelle zeigt Benutzername + Beschreibung + E-Mail. - Bearbeitung von Beschreibung + E-Mail erfolgt über den Button `Profil ändern` und ein separates Formular. - Passwortänderung erfolgt über den Button `Passwort ändern` und ein separates Formular. - Alle Formulare der Seite sind CSRF-geschützt: ein Token pro Session in `$_SESSION['settings_csrf_token']`, das jedes POST mitschicken muss. ## Wichtige Betriebsdetails - Session-Status: - Login setzt `$_SESSION['admin_logged_in'] = true` - Login setzt zusätzlich `$_SESSION['admin_username']` - Logout löscht beide Werte und beendet die Session. - Das System schreibt `admins.json` nur bei expliziten Admin-Aktionen (anlegen, ändern, löschen), nicht während reiner Lesevorgänge.