NimbusNexus

Roles

A role is a bundle of permissions. Role assignment is the act of granting a role to a user on a project. The same user can hold different roles on different projects; a user with no role on a project can't see it at all.

Built-in roles

Every project ships with four built-in roles you can assign without defining anything custom:

RoleWhat they can do
viewerRead every resource. No writes, no deletes. Right for monitoring tools, auditors.
editorCreate + update most resources. Cannot manage IAM (users, roles, keys). Right for day-to-day developers.
adminEverything editor can do, plus IAM. Can create users, grant/revoke roles, manage API keys.
billing-adminRead invoices, change payment method, view + raise quota. No resource access. Right for finance.

The admin role does not include billing-admin and vice versa. By design โ€” the engineer who runs the API shouldn't also be the one approving the bill.

Granular roles

Beyond the four built-ins, we ship per-resource granular roles for the cases where editor is too much:

  • vms:operator โ€” create / start / stop / destroy VMs only, no networking
  • storage:operator โ€” manage volumes, buckets, snapshots, backups
  • dns:admin โ€” full DNS zone + record management; nothing else
  • networking:admin โ€” networks, subnets, security groups, floating IPs, LBs
  • databases:admin โ€” managed databases + their backups

You assign these the same way as built-ins, via POST /v1/role-assignments.

Custom roles

Define your own at POST /v1/roles (not in the minimal sample below) by listing the permissions to bundle. Permission names follow the pattern <resource>:<action> โ€” e.g. vms:read, volumes:create, databases:snapshot. The full permission catalog is at GET /v1/permissions.

Use cases for custom roles: "read everything except billing" for a security auditor; "manage DNS records but not zones" for a marketing team that owns subdomain content but not the zone delegation.

How role assignments compose

A user can hold multiple role assignments on one project. The effective permission set is the union โ€” the role list is additive, not multiplicative. Granting viewer + vms:operator to the same user gives them read on everything + write on VMs specifically.

Revoking one role doesn't revoke the others. To strip a user completely, delete each assignment one at a time, or delete the user (which atomically revokes all assignments).

What's next

  • Users โ€” who you grant roles to.
  • Projects โ€” what you grant roles on.
  • Authentication โ€” how API keys map to user roles.

No endpoints to show

The OpenAPI spec doesn't currently expose any endpoints under therolestag. This is usually a manifest typo; check that the tag matches what the backend serves at /openapi/external.json.