-- ===================================================================== -- aether-admin / Modul: Admin-Team -- -- Das Team ist keine eigene Liste — es sind die Benutzer in -- `aether_users` mit einer Gruppe über `user`. Rollen zu vergeben heißt -- hier, die Gruppe eines Benutzers zu ändern; der Core respektiert sie -- ab dann überall. -- ===================================================================== Admin = Admin or {} -- Nur diese Gruppen sind vergebbar (owner nur von owner — via Rechte-Matrix) local ROLLEN = { 'support', 'admin', 'owner' } --- Ist eine Gruppenkennung gültig? local function GueltigeRolle(g) for _, r in ipairs(ROLLEN) do if r == g then return true end end return false end Admin.Kern.Registriere('team', 'laden', function(handelnder, daten) local zeilen = MySQL.query.await([[ SELECT license, name, admin_group FROM aether_users WHERE admin_group <> 'user' ORDER BY FIELD(admin_group,'owner','admin','support'), name ]]) or {} -- Wer davon ist online? local onlineLizenz = {} for _, sid in ipairs(GetPlayers() or {}) do onlineLizenz[Admin.Auth.Lizenz(tonumber(sid))] = true end for _, z in ipairs(zeilen) do z.online = onlineLizenz[z.license] and true or false end return { team = zeilen, rollen = ROLLEN, rechte = Admin.Kern.RechteAbbild(handelnder.quelle) } end) Admin.Kern.Registriere('team', 'speichern', function(handelnder, daten) local rolle = tostring(daten.rolle or '') if not GueltigeRolle(rolle) then return nil, 'Unbekannte Rolle.' end -- Nur ein Owner darf Owner-Rechte vergeben if rolle == 'owner' and not Admin.Auth.Hat(handelnder.quelle, 'owner') then return nil, 'Owner-Rechte darf nur ein Owner vergeben.' end -- Ziel über Lizenz oder Namenssuche bestimmen local lizenz = daten.lizenz and tostring(daten.lizenz) or nil if not lizenz then local treffer = Admin.DB.SucheBenutzer(tostring(daten.name or '')) if #treffer == 0 then return nil, 'Kein Benutzer gefunden.' end if #treffer > 1 then return nil, 'Mehrdeutig — bitte die Lizenz angeben.' end lizenz = treffer[1].license end if not Admin.DB.SetzeGruppe(lizenz, rolle) then return nil, 'Benutzer nicht gefunden.' end Admin.Auth.CacheLeerenNachLizenz(lizenz) Admin.Log.Schreibe(handelnder, 'Rolle vergeben', daten.name or lizenz, rolle) return { ok = true } end) Admin.Kern.Registriere('team', 'entfernen', function(handelnder, daten) local lizenz = tostring(daten.lizenz or '') if lizenz == '' then return nil, 'Keine Lizenz angegeben.' end if lizenz == handelnder.lizenz then return nil, 'Du kannst dir nicht selbst die Rechte entziehen.' end Admin.DB.SetzeGruppe(lizenz, 'user') Admin.Auth.CacheLeerenNachLizenz(lizenz) Admin.Log.Schreibe(handelnder, 'Aus dem Team entfernt', daten.name or lizenz) return { ok = true } end)