Przejdź do treści
Blog

Uprawnienia ACE w FiveM: role i komendy dla administracji

Jak działają add_ace i add_principal w server.cfg, gotowy podział na moderatorów i adminów, sprawdzanie w skryptach i gdzie ACE przestaje wystarczać.

Autor: Termi

4 min czytania
  • Staff
  • Permissions
  • server.cfg
  • Security
Na tej stronie

Każdy serwer FiveM w końcu staje przed tym samym pytaniem: jak pozwolić moderatorowi wyrzucać graczy, nie pozwalając mu rozdawać pieniędzy ani wyłączać serwera? FXServer odpowiada na to systemem uprawnień ACE, który ustawiasz w server.cfg. Ten poradnik pokazuje, jak działa ACE, podział administracji do skopiowania, sprawdzanie uprawnień w skryptach i miejsca, w których ACE przestaje wystarczać.

Jak działa ACE

ACE ma dwa rodzaje linijek. add_ace daje uprawnienie principalowi, a add_principal sprawia, że jeden principal dziedziczy po drugim. Gracze to principale nazwane od swoich identyfikatorów, a grupy to principale, które nazywasz sam:

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
  • Samo command obejmuje każdą komendę, więc group.admin może uruchomić wszystkie.
  • command.quit deny odbiera jedną z nich. deny wygrywa z allow dla tego samego uprawnienia, a domyślny server.cfg używa dokładnie tej linijki, żeby admini nie mogli uruchomić quit.
  • command.kick obejmuje komendę kick i nic więcej.
  • add_principal group.admin group.mod sprawia, że admini dziedziczą wszystko, co mają moderatorzy.
  • Gracz trafia do grupy przez identyfikator: license, discord, steam albo fivem. Gdzie się da, używaj licencji, bo jest przypięta do konta Rockstar.

Te same linijki wpisane w konsolę serwera działają od razu, więc nie potrzebujesz restartu, żeby komuś dać rolę. Dopisz je też do server.cfg, bo inaczej znikną po następnym restarcie.

Sprawdzanie uprawnień w skrypcie

Komenda zarejestrowana jako ograniczona działa tylko dla principali, którzy mają command.<nazwa>. Ograniczenie to true na końcu:

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

Przy wszystkim, co nie jest komendą, np. przycisku w menu albo net evencie, sprawdź uprawnienie sam po stronie serwera i nadaj je jak każde inne 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

Sprawdzaj na serwerze

Nigdy nie polegaj na sprawdzaniu uprawnień w skrypcie klienta. Gracze mogą wywołać każdy net event z dowolnymi argumentami, więc sprawdzenie musi siedzieć w handlerze na serwerze.

ESX, QBCore i txAdmin

QBCore też korzysta z ACE: jego poziomy uprawnień to principale qbcore.god, qbcore.admin i qbcore.mod, które rozdajesz przez add_principal. ESX trzyma własną kolumnę group w users i sprawdza ją przez xPlayer.getGroup(). txAdmin ma trzeci zestaw, konta adminów z własnymi uprawnieniami do panelu i menu w grze, np. do wyrzucania, banowania albo restartu, i one działają tylko w txAdminie.

Gdzie ACE przestaje wystarczać

  • Siedzi w server.cfg. Zmiana uprawnień moderatora to edycja pliku i ponowne wpisanie linijki w konsolę.
  • Samo ACE nie zapisuje, kto co uruchomił, więc po fakcie nic nie łączy komendy z osobą.
  • Umie tylko pozwolić albo zabronić. Komenda, która rozdaje milion dolarów, wykona się w chwili, gdy wpisze ją ktoś z uprawnieniem, i nie da się kazać jej czekać na drugą osobę.

Role i zgody w FiveDock

Panel FiveDock uruchamia komendy serwera przez agenta, więc administracja może działać z telefonu, bez wchodzenia do gry. Każda osoba loguje się na własne konto, kluczem dostępu, przez Discorda albo linkiem z maila, a każda akcja trafia do dziennika aktywności z jej nazwą, w każdym planie.

Na Metro role decydują, kto może uruchomić którą komendę: support dostaje kick i warn, właściciele wszystko. Z drugim właścicielem niebezpieczne komendy czekają na jego zgodę, zanim się wykonają. Na Free i City komendy, które dają pieniądze albo przedmioty, już mogą czekać na zgodę drugiej osoby z administracji.

Metro maskuje też dane osobowe zależnie od roli, więc osoby na okresie próbnym nigdy nie widzą prawdziwych adresów ani danych płatności, a przeglądarka bazy pozwala adminom zajrzeć do tabeli, podczas gdy hasło do bazy zostaje na serwerze.

Częste pytania

Jak dać komuś admina na serwerze FiveM?

Dopisz do server.cfg linijkę, która wrzuca jego identyfikator do grupy adminów, np. add_principal identifier.license:<jego licencja> group.admin, i upewnij się, że group.admin ma uprawnienia, które chcesz, np. add_ace group.admin command allow. Wpisz te same linijki w konsolę serwera, żeby zadziałały bez restartu.

Gdzie znaleźć identyfikator licencji gracza?

Strona gracza w txAdminie pokazuje wszystkie identyfikatory, tak samo natywka GetPlayerIdentifiers(source). Licencja to ten, który zaczyna się od license:.

Czym się różni add_ace od add_principal?

add_ace daje principalowi uprawnienie. add_principal robi z jednego principala członka drugiego, więc dziedziczy jego uprawnienia. Uprawnienia dajesz grupom przez add_ace, a graczy wrzucasz do grup przez add_principal.

Dlaczego ograniczona komenda pisze access denied?

Identyfikatora gracza nie ma w grupie z command.<nazwa> albo linijka używa innego identyfikatora niż ten, z którym gracz się łączy. Sprawdź typ i wartość identyfikatora i pamiętaj, że deny wygrywa z allow.

Wszystkie artykuły