# aether-admin Zentrales Server-Admin-Panel für das Aether-Framework — als echtes FiveM-Resource, mit Anbindung an `aether-core` und **echten WebRTC-Live- Kameras** über einen separaten Media-Server. Im Spiel mit **F9** öffnen (Command `/adminpanel`). Zugriff hat nur, wessen `aether_users.admin_group` mindestens `support` ist. ## Rechte (Kopplung an aether-core) Die Gruppe eines Spielers steht in **`aether_users.admin_group`** — genau dort, wo der Core sie ohnehin führt (`user` < `support` < `admin` < `owner`). Dieses Modul liest sie und prüft **jede** Aktion serverseitig gegen die Rechte-Matrix in `shared/config.lua`. Die Oberfläche blendet nur aus, was ohnehin abgelehnt würde — sie ist nie der Torwächter. Eigene Gruppe setzen: ```sql UPDATE aether_users SET admin_group='owner' WHERE license='DEINE_LIZENZ'; ``` Oder direkt im Panel unter **Admin-Team** (ab `owner`). ## Datenbank ``` mysql < sql/aether_admin.sql ``` Setzt auf `aether.sql` auf (aus aether-core). **Bans nutzen `aether_users` mit** (`is_banned`/`ban_reason`/`ban_until`) — der Core sperrt darüber schon beim Connect. Eigene Tabellen: Warns, Bann-Verlauf, Reports, Notizen, Prüfprotokoll, Ankündigungen, Staatsprojekte, Immobilien, Fraktions-Meta, Einstellungen. ## Bereiche Dashboard · Weltkarte · Spieler (alle Eingriffe) · Fahrzeuge · Immobilien · Fraktionen (inkl. Payday) · Wirtschaft · Staatsprojekte · **Live-Kameras (WebRTC)** · Weltsteuerung · Ankündigungen · Bans & Warns · Reports · Ressourcen · Audit-Log · Admin-Team · Einstellungen. Alles läuft über ein einziges Netz-Event (`aether-admin:aufruf`), das im Kern rechtegeprüft an die Fachmodule verteilt. Jede eingreifende Aktion landet im Prüfprotokoll (`aether_admin_log`). Spieler melden aus dem Spiel mit **`/report `** — Tickets erscheinen im Bereich *Reports*. ## Live-Kameras (WebRTC) Echtes WebRTC über einen **eigenen Media-Server (SFU)**. Der FiveM-Server routet kein Video: er prüft Rechte, lässt sich vom Media-Server kurzlebige Token ausstellen und weist die Ziel-Clients an, in einen Raum zu senden. Viewer (das Panel) und Publisher (der Ziel-Client, im Hintergrund) sprechen per WebSocket direkt mit dem Media-Server. Einrichtung und die **einzige ehrliche Grenze** — die NUI kann das Spielbild nicht selbst abgreifen, die echte Videoquelle wird extern angeklemmt (`window.__aetherCapture` / OBS-Virtual-Cam) — stehen in [`media-server/README.md`](media-server/README.md). ## Aufbau ``` shared/config.lua Rechtegruppen, Rechte-Matrix, Sektionen, Media-Config server/ db.lua auth.lua log.lua kern.lua Basis: DB, Rechte, Protokoll, Dispatcher kamera.lua WebRTC-Orchestrierung (Token, Publisher-Aufträge) module/*.lua je Sektion ein Fachmodul main.lua Netz-Schnittstelle client/ main.lua Öffnen, Spielaktionen (Teleport/Heal/Spectate/…) kamera.lua Brücke Server → NUI (Publisher steuern) html/ Oberfläche + echtes WebRTC (js/webrtc.js) media-server/ eigenständiger Node-SFU (nicht Teil des Resources) ``` ## Status / Tests Server- und Client-Lua sowie die NUI-Skripte sind syntaktisch geprüft. Der Media-Server (`media-server/server.js`) ist syntaktisch geprüft, aber ein WebRTC-SFU lässt sich nur **im laufenden Betrieb** wirklich verifizieren — siehe die Hinweise in `media-server/README.md`. Ein erster Lauf gegen einen echten FiveM-Server mit eingespieltem Schema steht noch aus.