Aller au contenu
Blog

Permissions ACE sur FiveM : les bons droits pour votre staff

Comment add_ace et add_principal fonctionnent dans server.cfg, une config modo et admin à copier, les vérifications en script et les limites d’ACE.

Par Termi

5 min de lecture
  • Staff
  • Permissions
  • server.cfg
  • Security
Sur cette page

Tout serveur FiveM finit par se poser la même question : comment laisser un modérateur expulser des joueurs sans qu’il puisse distribuer de l’argent ou éteindre le serveur ? FXServer y répond avec ACE, le système de permissions que vous configurez dans server.cfg. Ce guide explique comment ACE fonctionne, une organisation du staff à copier, comment les scripts vérifient les permissions et où ACE ne suffit plus.

Comment fonctionne ACE

ACE a deux types de lignes. add_ace donne une permission à un principal, et add_principal fait hériter un principal d’un autre. Les joueurs sont des principals nommés d’après leurs identifiers, et les groupes sont des principals que vous nommez vous-même :

server.cfg
add_ace group.admin command allow
add_ace group.admin command.quit deny
add_ace group.mod command.kick allow
add_ace group.mod command.warn allow

add_principal group.admin group.mod

add_principal identifier.license:9a4f00ab12cd34ef group.admin
add_principal identifier.discord:123456789012345678 group.mod
  • command seul couvre toutes les commandes, donc group.admin peut toutes les exécuter.
  • command.quit deny en retire une. Un deny l’emporte sur un allow pour la même permission, et le server.cfg par défaut utilise exactement cette ligne pour empêcher les admins d’exécuter quit.
  • command.kick couvre la commande kick et rien d’autre.
  • add_principal group.admin group.mod fait hériter les admins de tout ce que les modos ont.
  • Les joueurs rejoignent un groupe par un identifier : license, discord, steam ou fivem. Utilisez la licence quand c’est possible, car elle reste attachée au compte Rockstar.

Les mêmes lignes tapées dans la console du serveur s’appliquent tout de suite, donc pas besoin de redémarrer pour donner un rôle. Ajoutez-les aussi dans server.cfg, sinon elles disparaissent au prochain redémarrage.

Vérifier les permissions dans un script

Une commande enregistrée comme restreinte ne s’exécute que pour les principals qui ont command.<nom>. La restriction, c’est le true à la fin :

server.lua
RegisterCommand('revive', function(source, args)
    local target = tonumber(args[1]) or source
    TriggerClientEvent('hospital:revive', target)
end, true)

Pour tout ce qui n’est pas une commande, comme un bouton de menu ou un net event, vérifiez la permission vous-même côté serveur, et accordez-la comme n’importe quel autre ACE :

server.lua
RegisterNetEvent('admin:giveMoney', function(target, amount)
    if not IsPlayerAceAllowed(source, 'admin.money') then return end
    local player = QBCore.Functions.GetPlayer(target)
    if player then player.Functions.AddMoney('bank', amount, 'admin') end
end)
server.cfg
add_ace group.admin admin.money allow

Vérifiez côté serveur

Ne comptez jamais sur une vérification de permission dans un script client. Les joueurs peuvent déclencher n’importe quel net event avec les arguments de leur choix, donc la vérification doit se trouver dans le handler serveur.

ESX, QBCore et txAdmin

QBCore utilise aussi ACE : ses niveaux de permission sont des principals nommés qbcore.god, qbcore.admin et qbcore.mod, que vous attribuez avec add_principal. ESX garde sa propre colonne group dans users et la lit avec xPlayer.getGroup(). txAdmin a un troisième système, des comptes admin avec leurs propres permissions pour son panel et son menu en jeu, par exemple expulser, bannir ou redémarrer, et elles ne valent que dans txAdmin.

Où ACE ne suffit plus

  • Tout vit dans server.cfg. Changer les droits d’un modérateur, c’est modifier un fichier et retaper la ligne dans la console.
  • ACE ne garde aucune trace de qui a exécuté quoi, donc après coup rien ne relie une commande à une personne.
  • Il sait seulement autoriser ou refuser. Une commande qui distribue un million de dollars s’exécute dès que quelqu’un qui a la permission la tape, et rien ne permet de la faire attendre une deuxième personne.

Rôles et validations dans FiveDock

Le panel FiveDock exécute les commandes serveur via l’agent, donc le staff peut agir depuis un téléphone sans rejoindre le jeu. Chaque membre du staff se connecte avec son propre compte, par passkey, Discord ou lien reçu par e-mail, et chaque action va dans le journal d’activité avec son nom, quel que soit le plan.

Sur Metro, les rôles décident qui peut exécuter chaque commande : le support a kick et warn, les owners ont tout. Avec un deuxième owner, les commandes dangereuses attendent sa validation avant de s’exécuter. Sur Free et City, les commandes qui donnent de l’argent ou des items peuvent déjà attendre l’accord d’un deuxième membre du staff.

Metro masque aussi les données personnelles selon le rôle, si bien que les nouvelles recrues ne voient jamais de vraies adresses ni de données de paiement, et son visualiseur de base de données permet aux admins de consulter une table pendant que le mot de passe de la base reste sur le serveur.

Questions fréquentes

Comment donner les droits admin à quelqu’un sur mon serveur FiveM ?

Ajoutez à server.cfg une ligne qui place son identifier dans le groupe admin, par exemple add_principal identifier.license:<sa licence> group.admin, et vérifiez que group.admin a les permissions voulues, par exemple add_ace group.admin command allow. Tapez les mêmes lignes dans la console du serveur pour les appliquer sans redémarrer.

Où trouver l’identifier de licence d’un joueur ?

La page du joueur dans txAdmin liste tous les identifiers, tout comme la native GetPlayerIdentifiers(source). La licence est celui qui commence par license:.

Quelle est la différence entre add_ace et add_principal ?

add_ace donne une permission à un principal. add_principal fait d’un principal le membre d’un autre, qui hérite alors de ses permissions. Vous donnez les permissions aux groupes avec add_ace et vous placez les joueurs dans les groupes avec add_principal.

Pourquoi ma commande restreinte affiche-t-elle access denied ?

L’identifier du joueur n’est dans aucun groupe qui a command.<nom>, ou la ligne utilise un autre identifier que celui avec lequel il se connecte. Vérifiez le type et la valeur de l’identifier, et rappelez-vous qu’un deny l’emporte sur un allow.

Tous les articles