Permissions

Ranks, how staff get one, and the key behind every tab and action.

Everything in the menu is gated on a key, and every key names the minimum rank allowed to use it. Defaults live in configs/permissions.lua; changes made in the in-game editor are saved to the database and win over the file.

The system is fail-closed. An unknown key is denied, a required rank that is not in your ranks list is denied, and an action with no permission at all is denied. A misconfiguration locks people out - it never lets them in.

Ranks

Ranks are an ordered list, lowest authority first. Higher ranks inherit everything below them.

configs/permissions.lua
ranks = { 'support', 'mod', 'admin', 'dev' },

rankLabels = {
    ['support'] = 'Support',
    ['mod']     = 'Moderator',
    ['admin']   = 'Administrator',
    ['dev']     = 'Developer',
},

-- Who may open the Permissions editor and change other people's ranks.
permissionToChangeOtherPermissions = 'dev',

Rename them, add a fifth, or cut it to two - the order of the list is the hierarchy.

If you rename a rank, update every place it is named: the menus / personal / player blocks below it, noclipEffects.colorsByPermission in configs/client.lua, and any ACE you have already granted.

How staff get a rank

Four sources. A player gets the highest rank any of them gives them.

The ace object is the bare rank string.

server.cfg
add_ace group.admin admin allow
add_principal identifier.license:abcd1234... group.admin

In-game only. ACE needs a connected player, so this grants nothing to the web portal.

ACE does not work for the web portal. There is no connected player behind a web request, so add_ace cannot be read. If you run the portal, grant staff through the in-game editor, permissionsByLicense, or permissionsByDiscordRole. The console warns on start if the portal is on and none of these are populated.

Editing permissions in game

Open the Permissions tab

Only ranks at or above permissionToChangeOtherPermissions can see it.

Change what a key requires

Pick any tab or action and set its minimum rank. Saved to the database, live immediately, and it overrides configs/permissions.lua from then on.

Or assign a player a rank

Search for a player and set their rank. None (remove) takes it away again.

Key reference

The key that decides whether a tab is shown at all.

KeyDefaultTab
mainsupportOpen the admin menu at all
dashboardsupportDashboard - keep it at or below main
playersmodPlayers
mapmodLive player map
personalmodPersonal
itemsadminItems
weaponsadminWeapons
vehiclesadminVehicles
reportsmodReports
loggingadminLogs
resourcesadminResources
statsadminStats
bansadminBans
offlineadminOffline players
densityadminDensity
toolsdevDev
settingssupportSettings

The Permissions tab has no key of its own - it uses permissionToChangeOtherPermissions.

Personal functions

Performed on the admin themselves.

KeyDefaultWhat it allows
noclipmodNoclip
godmodeadminGodmode
invisibleadminInvisible
superJumpadminSuper jump
speedRunadminSpeed run
infiniteAmmoadminInfinite ammo
blipsadminPlayer blips on the map
namesadminPlayer names overhead
teleportadminTP to waypoint, coords or a player
reviveAlladminRevive everyone on the server
reviveNearbyadminRevive everyone within range
weatheradminOpen the weather / time panel

Player functions

Performed on another player.

KeyDefaultWhat it allows
infomodSee the player-info panel
needsmodSee the Needs section
setNeedsadminChange a need
spectatemodSpectate
screenshotmodSilent one-off capture of their screen
viewScreenadminA live window on their screen, in game
portalViewScreendevThe same thing from a browser - see below
freezeadminFreeze
killadminKill
reviveadminRevive
bringadminTeleport them to you
dropFromSkyadminDrop from sky
giveItemadminGive an item or weapon
viewInventoryadminView their inventory
wipeInventoryadminWipe their inventory
wipeOfflineInventorydevWipe an offline character's inventory
clothingadminOpen a clothing menu on them
cuffadminCuff
kickadminKick
banadminBan
setRankdevAssign or change their admin rank

portalViewScreen is deliberately a separate key from viewScreen, and deliberately set to dev. The portal is the one surface reachable from the internet, so a stolen session there buys live surveillance of your players. Set it above viewScreen, or leave it at dev so nobody has it by accident. It also needs screens = true in the portal's own config, and does nothing at all without that resource.

Trolling

Kept in its own group so a rank can be given the player actions without any of these. All default to admin, and none of them are silent.

fire · attackingPed · mutePlayer · fart · slowMove · reverseControls · cloneFollower · ghost · breakWheel

Reports

KeyDefaultWhat it allows
chatmodReply inside a report
closeadminClose a report
changeStatusadminChange a report's status

Dev tools

menus.tools opens the tab; these gate what is on it. All default to dev.

showEntities · coords · laser · vehicleInfo · deleteEntity

Economy map

KeyDefaultWhat it allows
economyViewadminOpen the board and read it
economyManagedevEdit and save it

The Dev tab is granted by either tools or economyView, so a designer can be given the board without any dev tools.

Density

KeyDefaultWhat it allows
setDensityadminMove a slider, flip the kill switch, apply a preset
resetDensityadminRestore the configured defaults

Building a rank

A worked example - what a trial moderator can actually do on the defaults:

RankSeesCan do
supportDashboard, SettingsRead the room. Nothing to anyone
mod…and Players, Map, Personal, ReportsSpectate, screenshot, noclip, work the report queue
admin…and Items, Weapons, Vehicles, Logs, Resources, Stats, Bans, Offline, DensityKick, ban, revive, give items, restart resources, watch screens
dev…and Dev, PermissionsEntity tools, the economy map, hand out ranks
Edit this page on GitHub

MIT 2026 © xT Development.

On this page