Zum Inhalt

ACE / Berechtigungen

Wrapper um FiveM's ACL-System. Ermöglicht programmatisches Hinzufügen/Entfernen von ACE-Berechtigungen und Principals — inklusive automatischer Discord-Rollen-Synchronisation.


Übersicht

cv.ace ist ein AceManager-Objekt mit Methoden zum Verwalten von Principals und Permissions zur Laufzeit.

Nicht persistent

ACE-Änderungen via cv.ace gelten nur für die aktuelle Server-Session. Sie gehen beim Neustart verloren, sofern sie nicht auch in server.cfg / permission.cfg stehen.


API

ACE-Berechtigungen

-- Berechtigung hinzufügen
cv.ace:addAce('group.admin', 'command.kick', true)   -- allow
cv.ace:addAce('group.mod',   'command.kick', false)  -- deny

-- Berechtigung entfernen
cv.ace:removeAce('group.admin', 'command.kick', true)

-- Prüfen ob Principal Berechtigung hat
cv.ace:hasAce(source, 'command.kick')      -- → boolean
cv.ace:hasGroup(source, 'admin')           -- → boolean (prüft 'group.admin')

Principals (Gruppen)

-- Spieler zu Gruppe hinzufügen
cv.ace:addPrincipal('identifier.license:abc123', 'group.admin')

-- Spieler aus Gruppe entfernen
cv.ace:removePrincipal('identifier.license:abc123', 'group.admin')

-- Mehrere Gruppen auf einmal
cv.ace:addToGroups('identifier.license:abc123', { 'admin', 'moderator' })

-- Gruppen setzen (überschreibt/erweitert)
cv.ace:setGroups('identifier.license:abc123', { 'supporter' })

Discord-Rollen-Sync

Weist einem Spieler automatisch ACE-Gruppen basierend auf seinen Discord-Rollen zu.

Konfiguration

-- In config.lua:
Config.DiscordRoleMapping = {
    ['1234567890123456'] = 'admin',      -- Discord-Rolle-ID → ACE-Gruppe
    ['9876543210987654'] = 'moderator',
    ['1111111111111111'] = 'supporter',
}

Verwendung

cv.ace:syncDiscordRoles(source, function(success, matchedGroups)
    if success then
        print('Synced ' .. #matchedGroups .. ' roles')
    end
end)

Voraussetzungen

  • discord_botToken als Convar gesetzt
  • discord_guildId als Convar gesetzt
  • Config.DiscordRoleMapping in config.lua definiert

Typisches Muster: Sync beim Login

AddEventHandler('cv_framework:player:characterLoaded', function(player)
    cv.ace:syncDiscordRoles(player.source, function(success)
        if success then
            dprint('[ACE] Discord roles synced for ' .. player.source)
        end
    end)
end)

Statische Berechtigungen in server.cfg

Permanente Berechtigungen gehören in permission.cfg (via exec in server.cfg):

add_ace group.admin command.kick allow
add_ace group.admin command.ban allow
add_ace group.moderator command.heal allow
add_ace group.supporter command.noclip allow

add_principal identifier.license:abc123 group.admin