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 :

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 :

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 :

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

# Ajouter une permission
add_ace <principal> <ace> <allow/deny>

# Ajouter un principal à un groupe
add_principal <principal> <group>

# Héritage entre groupes
add_ace <group1> <group2> allow

Exemples de configuration

Configuration simple : Un administrateur

# 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

####################################
# 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é :

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)

add_principal identifier.license:xxxxxxxxxxxxxx group.admin

Discord ID

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

add_principal identifier.fivem:xxxxxx group.admin

IP (Non recommandé)

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

# 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 :

# Définir une permission personnalisée
add_ace group.police police.armory allow
add_ace group.police police.vehicle allow

Dans votre script :

if IsPlayerAceAllowed(source, 'police.armory') then
    -- Le joueur peut accéder à l'armurerie
end

Configuration avec txAdmin

Accès à txAdmin

# 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

# 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 <identifier> <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

# 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

# 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 :

# ❌ 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

# 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 :

# 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 :

# 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 :

# Testez avec une permission globale temporairement
add_ace identifier.steam:110000xxxxxx command allow

Les groupes ne s'appliquent pas

Vérifiez l'ordre :

# ❌ 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 :

# 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 :

# 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 :

# 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 :

-- 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 :

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 :

# 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 :

####################################
# 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.