Pular para o conteúdo
Blog

Permissões ACE no FiveM: só os comandos de que a staff precisa

Como add_ace e add_principal funcionam no server.cfg, uma configuração de mods e admins para copiar, checagens em scripts e onde o ACE deixa de bastar.

Por Termi

4 min de leitura
  • Staff
  • Permissions
  • server.cfg
  • Security
Nesta página

Todo servidor de FiveM acaba esbarrando na mesma pergunta: como deixar um moderador expulsar jogadores sem que ele consiga distribuir dinheiro ou desligar o servidor? O FXServer responde com o ACE, o sistema de permissões que você configura no server.cfg. Este guia explica como o ACE funciona, uma divisão da staff para copiar, como os scripts checam permissões e onde o ACE deixa de bastar.

Como o ACE funciona

O ACE tem dois tipos de linha. add_ace dá uma permissão a um principal, e add_principal faz um principal herdar de outro. Jogadores são principals com o nome dos seus identifiers, e grupos são principals que você mesmo nomeia:

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 sozinho cobre todos os comandos, então group.admin pode executar todos eles.
  • command.quit deny tira um deles de volta. Um deny vence um allow para a mesma permissão, e o server.cfg padrão usa exatamente essa linha para impedir que admins executem quit.
  • command.kick cobre o comando kick e nada além disso.
  • add_principal group.admin group.mod faz os admins herdarem tudo que os mods têm.
  • Jogadores entram num grupo por um identifier: license, discord, steam ou fivem. Use a licença sempre que puder, porque ela fica com a conta da Rockstar.

As mesmas linhas digitadas no console do servidor valem na hora, então você não precisa reiniciar para dar um cargo a alguém. Coloque-as também no server.cfg, ou elas somem no próximo reinício.

Checar permissões em um script

Um comando registrado como restrito só roda para principals que têm command.<nome>. A restrição é o true no final:

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

Para tudo que não é comando, como um botão de menu ou um net event, cheque a permissão você mesmo no servidor e conceda-a como qualquer outro 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

Cheque no servidor

Nunca confie numa checagem de permissão em um script de cliente. Jogadores podem disparar qualquer net event com os argumentos que quiserem, então a checagem precisa ficar no handler do servidor.

ESX, QBCore e txAdmin

O QBCore também usa ACE: seus níveis de permissão são principals chamados qbcore.god, qbcore.admin e qbcore.mod, que você distribui com add_principal. O ESX mantém uma coluna group própria em users e a checa com xPlayer.getGroup(). O txAdmin tem um terceiro sistema, contas de admin com permissões próprias para o painel e o menu dentro do jogo, como expulsar, banir ou reiniciar, e elas valem só dentro do txAdmin.

Onde o ACE deixa de bastar

  • Ele mora no server.cfg. Mudar as permissões de um moderador significa editar um arquivo e rodar a linha de novo no console.
  • O ACE em si não registra quem executou o quê, então depois do fato nada liga um comando a uma pessoa.
  • Ele só sabe permitir ou negar. Um comando que distribui um milhão de dólares roda assim que alguém com a permissão o digita, e não há como fazê-lo esperar por uma segunda pessoa.

Cargos e aprovações no FiveDock

O painel do FiveDock executa comandos do servidor pelo agente, então a staff pode agir pelo celular sem entrar no jogo. Cada pessoa da staff entra com a própria conta, por passkey, Discord ou um link enviado por e-mail, e toda ação vai para o registro de atividade com o nome dela, em todos os planos.

No Metro, os cargos decidem quem pode executar cada comando: o suporte recebe kick e warn, os owners recebem tudo. Com um segundo owner, comandos perigosos esperam a aprovação dele antes de rodar. No Free e no City, comandos que dão dinheiro ou itens já podem esperar o OK de outra pessoa da staff.

O Metro também mascara dados pessoais por cargo, então quem está em treinamento nunca vê endereços reais nem dados de pagamento, e o visualizador de banco de dados deixa os admins olharem uma tabela enquanto a senha do banco continua no servidor.

Perguntas frequentes

Como dou admin a alguém no meu servidor de FiveM?

Adicione ao server.cfg uma linha que coloque o identifier da pessoa no grupo admin, como add_principal identifier.license:<licença dela> group.admin, e confirme que group.admin tem as permissões que você quer, por exemplo add_ace group.admin command allow. Digite as mesmas linhas no console do servidor para aplicá-las sem reiniciar.

Onde encontro o identifier de licença de um jogador?

A página do jogador no txAdmin lista todos os identifiers, e a native GetPlayerIdentifiers(source) também. A licença é o que começa com license:.

Qual é a diferença entre add_ace e add_principal?

add_ace dá uma permissão a um principal. add_principal faz um principal virar membro de outro, e assim ele herda as permissões desse outro. Você dá permissões aos grupos com add_ace e coloca os jogadores nos grupos com add_principal.

Por que meu comando restrito diz access denied?

O identifier do jogador não está em um grupo que tenha command.<nome>, ou a linha usa um identifier diferente daquele com que ele se conecta. Confira o tipo e o valor do identifier e lembre que um deny sobrepõe um allow.

Todos os artigos