# Guide complet des permissions ACE pour FiveM ## Qu'est-ce que le système ACE ? ACE (Access Control Entry) est le système de permissions natif de FiveM qui permet de : - **Contrôler l'accès** aux commandes et fonctionnalités - **Créer des groupes** de permissions (admin, modo, VIP, etc.) - **Gérer les droits** de manière hiérarchique - **Sécuriser** les ressources et commandes sensibles ## Concepts de base ### Les trois éléments principaux **1. Principal (Identité)** Un principal est l'identité d'un joueur ou d'un groupe : ```cfg identifier.steam:110000xxxxxx # Identifiant Steam identifier.license:xxxxxx # License Rockstar identifier.discord:xxxxxx # ID Discord identifier.fivem:xxxxxx # ID FiveM group.admin # Groupe ``` **2. ACE (Permission)** Une permission spécifique : ```cfg command.kick # Permission de kick command.ban # Permission de ban resource.admin_menu # Accès à une ressource ``` **3. Allow/Deny** Autoriser ou refuser l'accès : ```cfg allow # Autorise la permission deny # Refuse la permission ``` ## Structure et hiérarchie ### Ordre d'exécution FiveM traite les permissions dans cet ordre : 1. **Permissions spécifiques du joueur** (identifier) 2. **Permissions de groupe** (group) 3. **Permissions héritées** (inheritance) ### Principe d'héritage Les groupes peuvent hériter des permissions d'autres groupes : ``` superadmin → admin → moderateur → joueur ``` Un superadmin a toutes les permissions d'admin, qui a toutes celles de modérateur, etc. ## Configuration dans server.cfg ### Syntaxe de base ```cfg # Ajouter une permission add_ace # Ajouter un principal à un groupe add_principal # Héritage entre groupes add_ace allow ``` ## Exemples de configuration ### Configuration simple : Un administrateur ```cfg # Créer le groupe admin add_ace group.admin command allow # Ajouter un joueur au groupe admin add_principal identifier.steam:110000xxxxxx group.admin ``` Cette configuration donne **toutes** les commandes à l'admin. ### Configuration avancée : Structure complète ```cfg #################################### # SYSTÈME DE PERMISSIONS ACE #################################### # ===== GROUPE SUPERADMIN ===== # Tous les droits, y compris txAdmin add_ace group.superadmin command allow add_ace group.superadmin resource allow add_ace group.superadmin builtin.everyone allow # Accès txAdmin add_principal identifier.steam:110000xxxxxx group.superadmin # ===== GROUPE ADMIN ===== # Hérite des droits modérateur + droits supplémentaires add_ace group.admin group.moderator allow # Permissions spécifiques admin add_ace group.admin command.restart allow add_ace group.admin command.stop allow add_ace group.admin command.start allow add_ace group.admin command.refresh allow add_ace group.admin command.ensure allow add_ace group.admin command.setjob allow add_ace group.admin command.giveitem allow add_ace group.admin command.givemoney allow add_ace group.admin command.car allow add_ace group.admin command.dv allow add_ace group.admin command.tp allow add_ace group.admin command.tpto allow add_ace group.admin command.bring allow add_ace group.admin command.freeze allow add_ace group.admin command.unban allow add_ace group.admin command.clearinventory allow add_ace group.admin command.revive allow add_ace group.admin command.setcoords allow add_ace group.admin command.setmodel allow # Ajouter des administrateurs add_principal identifier.steam:110000yyyyyy group.admin add_principal identifier.license:xxxxxx group.admin # ===== GROUPE MODERATEUR ===== # Permissions de modération de base add_ace group.moderator command.kick allow add_ace group.moderator command.ban allow add_ace group.moderator command.warn allow add_ace group.moderator command.mute allow add_ace group.moderator command.unmute allow add_ace group.moderator command.screenshot allow add_ace group.moderator command.spectate allow add_ace group.moderator command.goto allow add_ace group.moderator command.announce allow # Ajouter des modérateurs add_principal identifier.steam:110000zzzzzz group.moderator add_principal identifier.discord:123456789 group.moderator # ===== GROUPE SUPPORT ===== # Support technique limité add_ace group.support command.tp allow add_ace group.support command.tpto allow add_ace group.support command.bring allow add_ace group.support command.revive allow add_ace group.support command.announce allow # Ajouter du personnel support add_principal identifier.steam:110000aaaaaa group.support # ===== GROUPE VIP ===== # Avantages VIP sans permissions admin add_ace group.vip vip.priority allow add_ace group.vip vip.customskin allow add_ace group.vip vip.spawnvehicle allow # Ajouter des VIP add_principal identifier.steam:110000bbbbbb group.vip add_principal identifier.license:yyyyyy group.vip # ===== PERMISSIONS SPÉCIALES ===== # Bloquer certaines commandes pour tout le monde sauf admin add_ace builtin.everyone command.quit deny add_ace builtin.everyone command.restart deny add_ace group.admin command.quit allow add_ace group.admin command.restart allow ``` ## Types d'identifiants ### Steam ID Le plus courant et recommandé : ```cfg add_principal identifier.steam:110000xxxxxx group.admin ``` **Comment le trouver** : 1. Le joueur se connecte au serveur 2. Dans la console serveur, tapez `status` 3. Cherchez la ligne avec le pseudo du joueur 4. Copiez l'identifiant qui commence par `steam:` ### License (Rockstar) ```cfg add_principal identifier.license:xxxxxxxxxxxxxx group.admin ``` ### Discord ID ```cfg add_principal identifier.discord:123456789012345678 group.admin ``` **Comment le trouver** : 1. Activez le mode développeur Discord 2. Clic droit sur l'utilisateur → Copier l'ID ### FiveM ID ```cfg add_principal identifier.fivem:xxxxxx group.admin ``` ### IP (Non recommandé) ```cfg add_principal identifier.ip:192.168.1.1 group.admin ``` **Attention** : Les IP peuvent changer, utilisez plutôt Steam/Discord. ## Permissions pour ressources spécifiques ### Restreindre l'accès à une ressource ```cfg # Bloquer la ressource admin_menu pour tout le monde add_ace builtin.everyone resource.admin_menu deny # Autoriser seulement les admins add_ace group.admin resource.admin_menu allow ``` ### Permissions personnalisées dans les scripts Vos scripts peuvent vérifier des permissions personnalisées : ```cfg # Définir une permission personnalisée add_ace group.police police.armory allow add_ace group.police police.vehicle allow ``` Dans votre script : ```lua if IsPlayerAceAllowed(source, 'police.armory') then -- Le joueur peut accéder à l'armurerie end ``` ## Configuration avec txAdmin ### Accès à txAdmin ```cfg # Groupe pour accès complet txAdmin add_ace group.superadmin txadmin allow # Ajouter un administrateur add_principal identifier.steam:110000xxxxxx group.superadmin ``` ### Permissions txAdmin spécifiques ```cfg # Permissions granulaires txAdmin add_ace group.admin txadmin.view allow add_ace group.admin txadmin.control allow add_ace group.superadmin txadmin.settings allow ``` ## Commandes utiles en jeu ### Vérifier les permissions d'un joueur En tant qu'admin, dans la console F8 : ``` test_ace ``` Exemple : ``` test_ace steam:110000xxxxxx command.kick ``` Retourne `true` ou `false`. ### Lister les ACE actifs ``` list_aces ``` Affiche toutes les permissions actuellement définies. ## Exemples par type de serveur ### Serveur Roleplay ```cfg # Police add_ace group.police police.menu allow add_ace group.police police.armory allow add_ace group.police police.handcuff allow add_ace group.police police.vehicle allow add_ace group.police command.revive deny # EMS add_ace group.ems ems.menu allow add_ace group.ems ems.vehicle allow add_ace group.ems command.revive allow add_ace group.ems command.heal allow # Mécano add_ace group.mechanic mechanic.menu allow add_ace group.mechanic mechanic.repair allow add_ace group.mechanic mechanic.vehicle allow # Staff add_ace group.staff command.tp allow add_ace group.staff command.spectate allow add_ace group.staff command.noclip allow ``` ### Serveur Freeroam ```cfg # VIP accès véhicules premium add_ace group.vip vehicle.premium allow add_ace group.vip spawn.weapon allow # Donateurs add_ace group.donator spawn.custom allow add_ace group.donator teleport.anywhere allow # Admin freeroam add_ace group.admin command.weapon allow add_ace group.admin command.skin allow add_ace group.admin command.god allow ``` ## Sécurité et bonnes pratiques ### Principe du moindre privilège Donnez **uniquement** les permissions nécessaires : ```cfg # ❌ MAUVAIS : Tout donner add_ace group.moderator command allow # ✅ BON : Permissions spécifiques add_ace group.moderator command.kick allow add_ace group.moderator command.ban allow add_ace group.moderator command.warn allow ``` ### Protéger les commandes dangereuses ```cfg # Bloquer les commandes système pour tout le monde add_ace builtin.everyone command.restart deny add_ace builtin.everyone command.stop deny add_ace builtin.everyone command.quit deny add_ace builtin.everyone command.exec deny # Autoriser seulement les superadmins add_ace group.superadmin command.restart allow add_ace group.superadmin command.stop allow ``` ### Utiliser plusieurs identifiants Pour plus de sécurité, combinez Steam + Discord : ```cfg # Nécessite STEAM ET Discord add_principal identifier.steam:110000xxxxxx group.admin_steam add_principal identifier.discord:123456789 group.admin_discord add_ace group.admin_combined command allow # Les deux doivent être présents add_principal group.admin_steam group.admin_combined add_principal group.admin_discord group.admin_combined ``` ### Logs et audit Activez les logs pour suivre qui utilise quelles commandes : ```cfg # Dans server.cfg set sv_logLevel "info" set sv_scriptHookAllowed 0 ``` ## Dépannage ### Les permissions ne fonctionnent pas **Vérifications** : 1. Redémarrez complètement le serveur (pas juste `refresh`) 2. Vérifiez l'orthographe exacte des identifiants 3. Utilisez `status` en console pour voir les identifiants connectés 4. Les identifiants sont sensibles à la casse ### Commande refusée malgré les permissions **Causes possibles** : - Le script lui-même bloque la commande - Conflit avec un autre système de permissions (ESX, QBCore) - Permission mal écrite dans server.cfg **Solution** : ```cfg # Testez avec une permission globale temporairement add_ace identifier.steam:110000xxxxxx command allow ``` ### Les groupes ne s'appliquent pas **Vérifiez l'ordre** : ```cfg # ❌ MAUVAIS : Le groupe n'existe pas encore add_principal identifier.steam:xxx group.admin add_ace group.admin command allow # ✅ BON : Créer le groupe d'abord add_ace group.admin command allow add_principal identifier.steam:xxx group.admin ``` ### Impossible de se connecter à txAdmin **Vérifiez** : ```cfg # Assurez-vous d'avoir la permission txadmin add_ace group.superadmin txadmin allow add_principal identifier.steam:110000xxxxxx group.superadmin ``` ## Intégration avec ESX/QBCore ### ESX avec ACE ESX a son propre système de groupes, mais peut utiliser ACE : ```cfg # Donner les permissions ESX admin add_ace group.admin command.setjob allow add_ace group.admin command.givemoney allow # Lier l'ACE avec le groupe ESX add_principal identifier.steam:xxx group.admin ``` Dans la base de données ESX (`users`), mettez aussi le groupe à `admin`. ### QBCore avec ACE QBCore utilise les permissions ACE nativement : ```cfg # Dans server.cfg add_ace group.god command allow add_ace group.admin qbcore.admin allow # Dans qb-core/server/main.lua QBCore.Config.Server.Permissions = { ['god'] = { 'steam:110000xxxxxx', }, } ``` ## Permissions avancées ### Permissions temporaires Utilisez un script pour donner des permissions temporaires : ```lua -- Côté serveur ExecuteCommand(string.format('add_principal identifier.steam:%s group.temp_admin', hex)) -- Retirer après X temps SetTimeout(3600000, function() -- 1 heure ExecuteCommand(string.format('remove_principal identifier.steam:%s group.temp_admin', hex)) end) ``` ### Permissions conditionnelles Dans vos scripts, vérifiez plusieurs conditions : ```lua if IsPlayerAceAllowed(source, 'police.menu') and GetPlayerRoutingBucket(source) == 0 and IsPlayerOnDuty(source) then -- Ouvrir le menu police end ``` ### Wildcard (Joker) Utilisez `.*` pour donner accès à toutes les sous-permissions : ```cfg # Toutes les commandes police add_ace group.police command.police.* allow # Équivalent à : # command.police.arrest # command.police.handcuff # command.police.fine # etc. ``` ## Exemple de configuration complète Voici un exemple de configuration ACE complète pour un serveur roleplay : ```cfg #################################### # CONFIGURATION ACE COMPLÈTE #################################### # ===== PERMISSIONS GLOBALES ===== # Bloquer tout par défaut add_ace builtin.everyone command.restart deny add_ace builtin.everyone command.stop deny add_ace builtin.everyone command.exec deny # ===== SUPERADMIN ===== add_ace group.god command allow add_ace group.god txadmin allow add_principal identifier.steam:110000xxxxxx group.god # ===== ADMIN ===== add_ace group.admin group.moderator allow add_ace group.admin command.restart allow add_ace group.admin command.setjob allow add_ace group.admin command.givemoney allow add_ace group.admin command.giveitem allow add_ace group.admin command.car allow add_principal identifier.steam:110000yyyyyy group.admin # ===== MODERATEUR ===== add_ace group.moderator group.support allow add_ace group.moderator command.kick allow add_ace group.moderator command.ban allow add_ace group.moderator command.warn allow add_principal identifier.discord:123456789 group.moderator # ===== SUPPORT ===== add_ace group.support command.tp allow add_ace group.support command.revive allow add_ace group.support command.announce allow add_principal identifier.steam:110000zzzzzz group.support # ===== POLICE ===== add_ace group.police police.menu allow add_ace group.police police.handcuff allow add_ace group.police police.drag allow # ===== EMS ===== add_ace group.ems ems.menu allow add_ace group.ems command.revive allow add_ace group.ems command.heal allow # ===== VIP ===== add_ace group.vip vip.priority allow add_ace group.vip vip.customskin allow ``` ## Conclusion Le système ACE de FiveM est puissant et flexible. En suivant ce guide, vous pouvez créer une structure de permissions sécurisée et hiérarchique pour votre serveur. **Points clés à retenir** : - Utilisez des groupes plutôt que des permissions individuelles - Appliquez le principe du moindre privilège - Utilisez Steam ID comme identifiant principal - Testez toujours après modification - Documentez vos permissions Pour plus d'informations, consultez la documentation officielle FiveM sur les ACE.