-- ===================================================================== -- aether-admin — Rechteprüfung (Kopplung an aether-core) -- -- Die Wahrheit über die Gruppe eines Spielers steht in -- `aether_users.admin_group` — gepflegt vom Core. Dieses Modul liest -- sie, hält sie je Session vor und beantwortet die einzige Frage, die -- der Rest des Codes stellt: „Darf diese Server-ID das?" -- -- Geprüft wird IMMER hier, nie in der Oberfläche. Was der Client -- schickt, ist ein Wunsch, kein Nachweis. -- ===================================================================== Admin = Admin or {} Admin.Auth = {} -- Zwischenspeicher: [quelle] = gruppe local gruppeCache = {} --- Liest die Rockstar-Lizenz einer Server-ID (ohne Präfix) --- @param quelle number --- @return string|nil function Admin.Auth.Lizenz(quelle) local lizenz = GetPlayerIdentifierByType(quelle, 'license') if not lizenz then return nil end return (lizenz:gsub('license:', '')) end --- Anzeigename einer Server-ID --- @param quelle number --- @return string function Admin.Auth.Name(quelle) return GetPlayerName(quelle) or ('Spieler ' .. tostring(quelle)) end --- Rechtegruppe einer Server-ID (mit Cache) --- @param quelle number --- @return string function Admin.Auth.Gruppe(quelle) if gruppeCache[quelle] then return gruppeCache[quelle] end local lizenz = Admin.Auth.Lizenz(quelle) if not lizenz then return 'user' end local gruppe = Admin.DB.GruppeVonLizenz(lizenz) gruppeCache[quelle] = gruppe return gruppe end --- Verwirft den Cache einer Server-ID (nach Rollenänderung / Disconnect) --- @param quelle number function Admin.Auth.CacheLeeren(quelle) gruppeCache[quelle] = nil end --- Verwirft den Cache einer Lizenz, egal unter welcher Server-ID sie online ist --- @param lizenz string function Admin.Auth.CacheLeerenNachLizenz(lizenz) for quelle in pairs(gruppeCache) do if Admin.Auth.Lizenz(quelle) == lizenz then gruppeCache[quelle] = nil end end end --- Erfüllt die Server-ID mindestens die geforderte Gruppe? --- @param quelle number --- @param benoetigt string --- @return boolean function Admin.Auth.Hat(quelle, benoetigt) return AdminConfig.Erfuellt(Admin.Auth.Gruppe(quelle), benoetigt) end --- Darf die Server-ID das Panel überhaupt öffnen? --- @param quelle number --- @return boolean function Admin.Auth.DarfOeffnen(quelle) return Admin.Auth.Hat(quelle, AdminConfig.MindestGruppe) end --- Baut den „Handelnden"-Kontext, den Module und das Log erwarten --- @param quelle number --- @return table { quelle, lizenz, name, gruppe } function Admin.Auth.Handelnder(quelle) return { quelle = quelle, lizenz = Admin.Auth.Lizenz(quelle), name = Admin.Auth.Name(quelle), gruppe = Admin.Auth.Gruppe(quelle), } end -- Cache aufräumen, wenn jemand geht AddEventHandler('playerDropped', function() gruppeCache[source] = nil end)