aether-framework/resources/[aether]/aether-admin/README.md
Jerrit Fritzsche e4b82dd685 Aether-Framework: Fachmodule, Admin-Panel und Docker-Datenbank
- aether-medical: Stationen/Belegung, Intensivstation, Blutbank, Fuhrpark,
  Nachrichten/Aushänge, Berichte und Textbausteine (server + NUI)
- aether-admin: vollständiges Server-Admin-Panel als echtes FiveM-Resource,
  an aether-core gekoppelt (Rechte über aether_users.admin_group), mit
  WebRTC-Live-Kameras (Bildschirmfreigabe) und separatem Media-Server (SFU)
- Prototypen admin/ vervollständigt
- SQL-Schema aether_admin.sql
- Docker-Compose mit MariaDB und idempotenter Auto-Migration (schema_migrations)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-27 18:55:32 +02:00

88 lines
3.5 KiB
Markdown

# 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 <Text>`** — 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.