Pabawi uses Role-Based Access Control (RBAC) when AUTH_ENABLED=true. Users are assigned roles. Roles contain permissions. Permissions gate specific actions.
<integration>:<category>:<action>
Examples:
proxmox:provision:create_vm— create VMs in Proxmoxproxmox:lifecycle:start— start Proxmox VMs/containersproxmox:lifecycle:destroy— destroy Proxmox VMs/containers*:provision:*— all provisioning actions on all integrations*:*:*— full admin access
Full access. Permission: *:*:*
Provision and manage resources. Cannot destroy. Cannot configure integrations.
| Permission | Description |
|---|---|
*:provision:* |
Create VMs, containers, EC2 instances |
*:lifecycle:* |
Start, stop, reboot — but not destroy |
*:inventory:read |
View inventory and facts |
Read-only.
| Permission | Description |
|---|---|
*:inventory:read |
View inventory |
*:facts:read |
View node facts |
| Permission | Grants |
|---|---|
<int>:provision:create_vm |
Create VMs (Proxmox, AWS) |
<int>:provision:create_lxc |
Create LXC containers (Proxmox) |
<int>:provision:* |
All provisioning for the integration |
| Permission | Grants |
|---|---|
<int>:lifecycle:start |
Start stopped resources |
<int>:lifecycle:stop |
Stop running resources |
<int>:lifecycle:reboot |
Reboot resources |
<int>:lifecycle:shutdown |
Graceful shutdown |
<int>:lifecycle:destroy |
Permanently delete — also requires ALLOW_DESTRUCTIVE_PROVISIONING=true |
<int>:lifecycle:* |
All lifecycle actions |
| Permission | Grants |
|---|---|
*:inventory:read |
View node inventory |
*:facts:read |
View node facts |
Pabawi hides UI elements the current user lacks permission for:
| UI Element | Required Permission |
|---|---|
| Manage tab | Any lifecycle:* or provision:* permission |
| Provision tab | Any provision:* permission |
| VM creation form | <int>:provision:create_vm |
| LXC creation form | <int>:provision:create_lxc |
| Start button | <int>:lifecycle:start |
| Stop button | <int>:lifecycle:stop |
| Destroy button | <int>:lifecycle:destroy + ALLOW_DESTRUCTIVE_PROVISIONING=true |
| Setup menu | Admin only |
Use the API or (when auth is enabled) the Users section in Settings.
Quick setup via API:
# Create a user
curl -X POST http://localhost:3000/api/users \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"username": "alice", "password": "secure-pass", "email": "alice@example.com"}'
# Create a role
curl -X POST http://localhost:3000/api/roles \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "vm-operator", "description": "Create and manage VMs"}'
# Assign permission to role
curl -X POST http://localhost:3000/api/roles/<role-id>/permissions \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"permission": "proxmox:provision:create_vm"}'
# Assign role to user
curl -X POST http://localhost:3000/api/users/<user-id>/roles \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"roleId": "<role-id>"}'See api.md for the full RBAC API reference.
VM operator (Proxmox only):
proxmox:provision:create_vm
proxmox:lifecycle:start
proxmox:lifecycle:stop
proxmox:lifecycle:reboot
proxmox:inventory:read
Read-only viewer:
*:inventory:read
*:facts:read
Full Proxmox access (including destroy):
proxmox:provision:*
proxmox:lifecycle:*
Also requires ALLOW_DESTRUCTIVE_PROVISIONING=true for destroy to work.