Permisos ACE en FiveM: solo los comandos que tu staff necesita
Cómo funcionan add_ace y add_principal en server.cfg, una configuración de mods y admins para copiar, comprobaciones en scripts y cuándo ACE se queda corto.
Por Termi
- Staff
- Permissions
- server.cfg
- Security
En esta página
- Cómo funciona ACE
- Comprobar permisos en un script
- ESX, QBCore y txAdmin
- Cuándo ACE se queda corto
- Roles y aprobaciones en FiveDock
- Preguntas frecuentes
- ¿Cómo doy admin a alguien en mi servidor de FiveM?
- ¿Dónde encuentro el identifier de licencia de un jugador?
- ¿Cuál es la diferencia entre add_ace y add_principal?
- ¿Por qué mi comando restringido dice access denied?
Todo servidor de FiveM acaba topándose con la misma pregunta: ¿cómo dejas que un moderador expulse jugadores sin que pueda repartir dinero ni apagar el servidor? FXServer la responde con ACE, el sistema de permisos que configuras en server.cfg. Esta guía explica cómo funciona ACE, una configuración de staff para copiar, cómo comprueban los scripts los permisos y dónde ACE se queda corto.
Cómo funciona ACE
ACE tiene dos tipos de líneas. add_ace da un permiso a un principal, y add_principal hace que un principal herede de otro. Los jugadores son principals con el nombre de sus identifiers, y los grupos son principals a los que pones nombre tú:
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.modLas mismas líneas escritas en la consola del servidor se aplican al instante, así que no necesitas reiniciar para dar un rol. Ponlas también en server.cfg, o desaparecerán en el siguiente reinicio.
Comprobar permisos en un script
Un comando registrado como restringido solo se ejecuta para los principals que tienen command.<nombre>. La restricción es el true del final:
RegisterCommand('revive', function(source, args)
local target = tonumber(args[1]) or source
TriggerClientEvent('hospital:revive', target)
end, true)Para todo lo que no sea un comando, como un botón de menú o un net event, comprueba tú mismo el permiso en el servidor y concédelo como cualquier otro ACE:
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)add_ace group.admin admin.money allowComprueba en el servidor
No confíes nunca en una comprobación de permisos en un script de cliente. Los jugadores pueden disparar cualquier net event con los argumentos que quieran, así que la comprobación tiene que estar en el handler del servidor.
ESX, QBCore y txAdmin
QBCore también usa ACE: sus niveles de permiso son principals llamados qbcore.god, qbcore.admin y qbcore.mod, que repartes con add_principal. ESX guarda su propia columna group en users y la comprueba con xPlayer.getGroup(). txAdmin tiene un tercer sistema, cuentas de admin con permisos propios para su panel y su menú dentro del juego, como expulsar, banear o reiniciar, y esos solo valen dentro de txAdmin.
Cuándo ACE se queda corto
Roles y aprobaciones en FiveDock
El panel de FiveDock ejecuta comandos del servidor a través del agente, así que el staff puede actuar desde el móvil sin entrar al juego. Cada miembro del staff inicia sesión con su propia cuenta, con passkey, Discord o un enlace por correo, y cada acción queda en el registro de actividad con su nombre, en todos los planes.
En Metro, los roles deciden quién puede ejecutar cada comando: soporte tiene kick y warn, los owners tienen todo. Con un segundo owner, los comandos peligrosos esperan su aprobación antes de ejecutarse. En Free y City, los comandos que dan dinero o items ya pueden esperar el visto bueno de otro miembro del staff.
Metro también enmascara los datos personales según el rol, así que los nuevos nunca ven direcciones reales ni datos de pago, y su visor de base de datos permite a los admins mirar una tabla mientras la contraseña de la base de datos se queda en el servidor.
Preguntas frecuentes
¿Cómo doy admin a alguien en mi servidor de FiveM?
Añade a server.cfg una línea que meta su identifier en el grupo admin, como add_principal identifier.license:<su licencia> group.admin, y asegúrate de que group.admin tenga los permisos que quieres, por ejemplo add_ace group.admin command allow. Escribe las mismas líneas en la consola del servidor para aplicarlas sin reiniciar.
¿Dónde encuentro el identifier de licencia de un jugador?
La página del jugador en txAdmin lista todos los identifiers, igual que la native GetPlayerIdentifiers(source). La licencia es el que empieza por license:.
¿Cuál es la diferencia entre add_ace y add_principal?
add_ace da un permiso a un principal. add_principal hace que un principal sea miembro de otro, así que hereda sus permisos. Los permisos se los das a los grupos con add_ace y metes a los jugadores en grupos con add_principal.
¿Por qué mi comando restringido dice access denied?
El identifier del jugador no está en ningún grupo que tenga command.<nombre>, o la línea usa un identifier distinto del que usa para conectarse. Revisa el tipo y el valor del identifier, y recuerda que un deny anula un allow.