Permissions et sécurité
Groupes admin et modération, niveaux everyone, staff et admin, ACE ox_target.<clé>, clés personnalisées, visibilité côté client et validations réellement faites par le serveur.
But : décider qui voit et qui peut utiliser chaque option, en sachant ce qui est vraiment contrôlé par le serveur.
Fichiers : config.lua (AdminGroups, ModGroups, UseAcePermissions, Permissions) et server.cfg pour les ACE.
Les niveaux
| Valeur | Accès |
|---|---|
'everyone' |
Tout le monde. |
'staff' |
Groupes de Config.AdminGroups ou de Config.ModGroups. |
'admin' |
Groupes de Config.AdminGroups. |
{ 'groupe1', 'groupe2' } |
Au moins un des groupes listés. Une liste vide n’autorise personne. |
false |
Personne. |
'autreCle' |
Même résultat que la clé autreCle de Config.Permissions (jusqu’à 6 renvois ; au-delà ou en boucle : refus). |
L’appartenance à un groupe est vérifiée par Bridge.HasGroup :
- ESX :
xPlayer.getGroup()doit être exactement égal au nom du groupe. Un joueursuperadminn’est pasadmin: listez les deux si besoin. - QBCore :
QBCore.Functions.HasPermission, puis l’ACEgroup.<nom>. - Autres (qbx, ox, nd, standalone) :
IsPlayerAceAllowed(source, 'group.<nom>'). Si ce test échoue chez vous, accordez explicitement cette ACE au groupe, par exempleadd_ace group.admin group.admin allow. - Le hook serveur
HasGroup(source, group)remplace tout ce qui précède.
Les clés
| Paramètre | Type | Défaut | Effet |
|---|---|---|---|
Config.AdminGroups | string[] | { 'admin', 'superadmin', 'owner' } | Groupes reconnus par le niveau « admin » (et « staff »). Lu par : moteur protégé, bridge/server.lua |
Config.ModGroups | string[] | { 'mod' } | Groupes ajoutés au niveau « staff ». Lu par : moteur protégé, bridge/server.lua |
Config.UseAcePermissions | boolean | false | true : l’ACE ox_target.<clé> accorde aussi la permission correspondante, avant les groupes. Lu par : moteur protégé |
Config.Permissions | table |
| Chaque clé vaut everyone, staff, admin, une liste de groupes, false, ou le nom d’une autre clé. Vous pouvez ajouter vos propres clés. Lu par : moteur protégé |
Vous pouvez ajouter vos propres clés et les utiliser dans le champ permission d’une option ou d’une action serveur :
Config.Permissions = {
staffMenu = 'staff',
revive = 'admin',
heal = 'admin',
selfRevive = 'staff',
selfHeal = 'staff',
forceEmote = 'admin',
forceMe = 'admin',
weather = 'admin',
giveKeys = 'admin',
devTools = 'admin',
emsTools = { 'ambulance_chef', 'admin' },
}
Ne supprimez pas les dix clés d’origine : un builtin dont la clé manque devient invisible et refusé pour tout le monde.
ACE
Avec Config.UseAcePermissions = true, l’ACE ox_target.<clé> accorde la permission avant le contrôle des groupes :
add_ace group.helper ox_target.selfHeal allow
add_ace identifier.license:0123456789abcdef ox_target.devTools allow
La vérification ACE se répète à chaque étape d’un renvoi : pour selfHeal = 'staff', l’ACE ox_target.selfHeal suffit, mais aussi ox_target.staff, qui ouvre alors toutes les clés valant 'staff'. L’ACE ne remplace pas la clé : retirer selfHeal de Config.Permissions rend l’option invisible même avec l’ACE.
Ce que fait le client
Le client reçoit du serveur une carte des permissions : chaque clé de Config.Permissions, les niveaux everyone, staff, admin, et pour chaque action serveur personnalisée son résultat. Il la redemande toutes les Config.Security.permissionRefresh ms et après le chargement du personnage. Cette carte sert uniquement à masquer des options.
Conséquences :
- Une option avec une
permissioninconnue de la carte est toujours masquée. - Un changement de groupe en jeu peut mettre jusqu’à
permissionRefreshms à se refléter dans le menu. - Les champs
jobs,groupsetitemsd’une option sont évalués côté client pour l’affichage.
Ce que vérifie le serveur
Les builtins qui passent par une action serveur et vos server_action sont contrôlés par le moteur, dans cet ordre : action connue, anti-spam, fonctionnalité, disponibilité de l’intégration, permission, métier, arguments, existence de la cible et distance (+ distanceTolerance), item. Une requête refusée de façon anormale est signalée (OnSuspiciousActivity ou console).
Options sans contrôle serveur dans l’archive : copier/voir l’ID, saisie de /me, anti-punch, outils de copie des Dev Tools, « Prendre apparence », restauration d’apparence, outils météo locaux et facture (validée par le script de facturation). Le défi Pierre Feuille Ciseaux et la cachette dans le coffre ont leurs propres contrôles serveur (distance, disponibilité).
Erreurs fréquentes
- Option staff visible pour tout le monde : la catégorie a
permission = 'staffMenu'mais une option enfant a été déplacée hors du sous-menu sans permission. 'superadmin'refusé sous ESX : ajoutez-le àConfig.AdminGroups.- ACE sans effet :
Config.UseAcePermissionsest resté àfalse.