Roles & Permissions
Define user roles and control access to servers and features.
Roles and Permissions
Role System
Each user has one role. Roles define what actions the user can perform. The system includes two built-in roles that cannot be deleted:
- admin (full access to everything)
- user (standard user access)
Admins can create custom roles with specific permission sets.
Role Model
| Field | Type | Description |
|---|---|---|
id | Int | Auto-incrementing ID |
name | String | Unique internal name |
displayName | String | Display name |
description | String | Description |
isAdmin | Boolean | Grants admin privileges |
permissions | String | JSON array of permission strings |
isSystem | Boolean | Prevents deletion |
sortOrder | Int | Display order |
Managing Roles
List Roles
GET /api/v2/admin/roles
Create Role
POST /api/v2/admin/roles
{
"name": "moderator",
"displayName": "Moderator",
"description": "Can manage servers but not users",
"permissions": ["airlink.admin.servers.view", "airlink.admin.servers.update"],
"isAdmin": false
}
Update Role
PUT /api/v2/admin/roles/:id
{ "permissions": ["airlink.admin.servers.*"] }
Delete Role
DELETE /api/v2/admin/roles/:id
System roles (admin, user) cannot be deleted.
Permission Tree
Permissions are dot-separated and hierarchical. A wildcard .* grants all sub-permissions.
Server Permissions
| Permission | Description |
|---|---|
server.* | All server operations |
server.view | View servers |
server.start | Start servers |
server.stop | Stop servers |
server.restart | Restart servers |
server.files | Access server files |
server.settings | Change server settings |
Admin Permissions
| Permission | Description |
|---|---|
admin.* | All admin operations |
airlink.admin.addons.* | All addon operations |
airlink.admin.addons.view | View addons |
airlink.admin.addons.toggle | Enable/disable addons |
airlink.admin.addons.reload | Reload addons |
airlink.admin.addons.store | Access addon store |
airlink.admin.addons.install | Install addons |
airlink.admin.addons.settings | Configure addons |
airlink.admin.addons.commands | Run addon commands |
airlink.admin.analytics.view | View analytics |
airlink.admin.users.* | All user operations |
airlink.admin.users.view | View users |
airlink.admin.users.create | Create users |
airlink.admin.users.edit | Edit users |
airlink.admin.users.delete | Delete users |
airlink.admin.nodes.* | All node operations |
airlink.admin.nodes.view | View nodes |
airlink.admin.nodes.create | Create nodes |
airlink.admin.nodes.update | Update nodes |
airlink.admin.nodes.delete | Delete nodes |
airlink.admin.servers.* | All server admin operations |
airlink.admin.servers.view | View all servers |
airlink.admin.servers.create | Create servers |
airlink.admin.servers.update | Update servers |
airlink.admin.servers.delete | Delete servers |
airlink.admin.apikeys.* | All API key operations |
airlink.admin.apikeys.view | View API keys |
airlink.admin.apikeys.create | Create API keys |
airlink.admin.apikeys.delete | Delete API keys |
airlink.admin.apikeys.edit | Edit API keys |
airlink.admin.api.docs.view | View API documentation |
airlink.admin.menu.main | Access admin menu |
airlink.admin.overview.main | Access admin overview |
airlink.admin.overview.checkForUpdates | Check for updates |
airlink.admin.overview.performUpdate | Perform updates |
airlink.admin.playerstats.view | View player stats |
airlink.admin.databases.* | All database operations |
airlink.admin.databases.view | View databases |
airlink.admin.databases.create | Create databases |
airlink.admin.databases.delete | Delete databases |
airlink.admin.databases.test | Test database connections |
API Permissions
| Permission | Description |
|---|---|
airlink.api.keys.* | All API key operations |
airlink.api.keys.view | View API keys |
airlink.api.keys.create | Create API keys |
airlink.api.keys.delete | Delete API keys |
airlink.api.keys.edit | Edit API keys |
airlink.api.servers.* | All server API operations |
airlink.api.servers.read | Read servers via API |
airlink.api.servers.create | Create servers via API |
airlink.api.servers.update | Update servers via API |
airlink.api.servers.delete | Delete servers via API |
airlink.api.users.* | All user API operations |
airlink.api.users.read | Read users via API |
airlink.api.users.create | Create users via API |
airlink.api.users.update | Update users via API |
airlink.api.users.delete | Delete users via API |
airlink.api.nodes.* | All node API operations |
airlink.api.nodes.read | Read nodes via API |
airlink.api.nodes.create | Create nodes via API |
airlink.api.nodes.update | Update nodes via API |
airlink.api.nodes.delete | Delete nodes via API |
airlink.api.settings.* | All settings API operations |
airlink.api.settings.read | Read settings via API |
airlink.api.settings.update | Update settings via API |
airlink.api.images.* | All image API operations |
airlink.api.images.read | Read images via API |
airlink.api.images.create | Create images via API |
airlink.api.images.update | Update images via API |
airlink.api.images.delete | Delete images via API |
airlink.api.locations.* | All location API operations |
airlink.api.locations.read | Read locations via API |
airlink.api.locations.create | Create locations via API |
Addon Permissions
Addons can register custom permissions in the addon.{slug}.* namespace. These are validated to ensure they stay within the addon’s namespace.
Sub-User Permissions
Sub-user permissions are separate from role permissions. They are granted per-server by the server owner. See features/users.md for the full list.
Permission Resolution
- Check if user is admin (full access)
- Check user’s role permissions (grants access based on role)
- For server-specific operations, check sub-user permissions.