- 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>
88 lines
3.5 KiB
Markdown
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.
|