# 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/admins.php`
- 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 (Kontakt/Profil); **interne Bestellmails** gehen an die Adresse aus `data/settings.json` (`order_recipient_email`), nicht an die Admin-Profil-E-Mails.
- Ä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 (nicht das **eigene** Konto),
  - Beschreibungen bearbeiten.

Diese Regeln werden serverseitig geprüft.

## Bedienung in `admin/admins.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.

## 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.
