- 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>
62 lines
2.0 KiB
Lua
62 lines
2.0 KiB
Lua
-- =====================================================================
|
|
-- aether-medical — Rechteprüfung
|
|
--
|
|
-- Ein Mitarbeiter hat ein Recht, wenn seine Rolle es vorsieht ODER es
|
|
-- ihm einzeln gewährt wurde — und es ihm nicht einzeln entzogen wurde.
|
|
-- Der Entzug hat immer Vorrang.
|
|
-- =====================================================================
|
|
|
|
Rechte = {}
|
|
|
|
--- Wandelt eine JSON-Liste in eine Menge um
|
|
--- @param roh string|nil JSON-Array
|
|
--- @return table { [wert] = true }
|
|
local function ZuMenge(roh)
|
|
local menge = {}
|
|
if not roh then return menge end
|
|
|
|
local erfolg, liste = pcall(json.decode, roh)
|
|
if erfolg and type(liste) == 'table' then
|
|
for _, wert in ipairs(liste) do menge[wert] = true end
|
|
end
|
|
return menge
|
|
end
|
|
|
|
--- Baut die vollständige Rechtemenge eines Mitarbeiters
|
|
--- @param personal table Zeile aus medical_personal
|
|
--- @return table { [rechtId] = true }
|
|
function Rechte.Berechne(personal)
|
|
local menge = Medizin.RechteDerRolle(personal.rolle)
|
|
|
|
-- Einzeln gewährte Rechte ergänzen
|
|
for recht in pairs(ZuMenge(personal.rechte_extra)) do
|
|
menge[recht] = true
|
|
end
|
|
|
|
-- Einzeln entzogene Rechte haben Vorrang
|
|
for recht in pairs(ZuMenge(personal.rechte_entzug)) do
|
|
menge[recht] = nil
|
|
end
|
|
|
|
return menge
|
|
end
|
|
|
|
--- Prüft ein einzelnes Recht
|
|
--- @param mitarbeiter table Mitarbeiterdaten (mit Feld `rechte`)
|
|
--- @param recht string Recht-Kennung
|
|
--- @return boolean
|
|
function Rechte.Hat(mitarbeiter, recht)
|
|
if not mitarbeiter or not mitarbeiter.rechte then return false end
|
|
if not recht then return true end
|
|
return mitarbeiter.rechte[recht] == true
|
|
end
|
|
|
|
--- Prüft, ob ein Mitarbeiter über einem anderen steht.
|
|
--- Verhindert, dass jemand Gleichrangige oder Höhere verwaltet.
|
|
--- @param mitarbeiter table Handelnder
|
|
--- @param zielRolle string Rolle der Zielperson
|
|
--- @return boolean
|
|
function Rechte.StehtUeber(mitarbeiter, zielRolle)
|
|
return Medizin.Stufe(mitarbeiter.rolle) > Medizin.Stufe(zielRolle)
|
|
end
|