Permissions
A permission in Waldur is a role granted to a user over a scope. Roles are named
SCOPE.ROLE — CUSTOMER.OWNER, PROJECT.ADMIN, OFFERING.MANAGER — and every grant,
whatever its scope, is exposed through a single endpoint: /api/user-permissions/.
Warning
Earlier versions of Waldur exposed one endpoint per scope, /api/customer-permissions/
and /api/project-permissions/, and returned customer_permissions / project_permissions
fields on /api/users/. All of these have been removed. The endpoints return 404, and
requesting the old fields on /api/users/ still returns 200 with those fields silently
absent — so a client written against the old shape fails quietly rather than loudly.
Use /api/user-permissions/ instead.
Listing permissions
1 2 3 | |
Each entry describes one grant: who holds it, which role, over which scope, and whether it is still active.
| Field | Description |
|---|---|
uuid |
Identifier of the grant itself |
user_uuid, user_username, user_name, user_email, user_slug |
The user holding the role |
role_name, role_description, role_uuid |
The role granted, e.g. CUSTOMER.OWNER |
scope_type |
customer, project, offering, call, proposal, … |
scope_uuid, scope_name |
The object the role applies to |
scope_is_removed |
Whether the scope has since been soft-deleted |
created, expiration_time |
When the role was granted, and when it lapses (null = no expiry) |
is_active |
false once revoked or expired |
revoked_by_username, revoked_by_full_name, revoke_reason |
Populated when the grant was revoked |
project_uuid, resource_uuid |
Set for project- and resource-scoped grants |
Filtering
| Filter | Matching |
|---|---|
?username=<username> |
Exact |
?user=<UUID>, ?user_url=<URL> |
Exact |
?full_name=<name>, ?native_name=<name>, ?user_slug=<slug> |
Case-insensitive partial |
?scope_type=<type> |
Exact — customer, project, offering, call, proposal |
?scope_uuid=<UUID>, ?scope_name=<name> |
Exact / case-insensitive partial |
?role_name=<name>, ?role_uuid=<UUID> |
Case-insensitive partial / exact |
?customer_uuid=<UUID> |
Every grant within an organization — the organization scope and its projects |
?is_active=true |
Excludes revoked and expired grants |
Ordering uses ?o=<field>, prefixed with - for descending. Supported fields are
username, full_name, native_name, email, expiration_time, created and role.
Fetching a user's permissions
To find everything a given user may do, filter by their username. The same call works with an eduTEAMS or MyAccessID CUID, since the CUID is stored as the username for federated accounts.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
The total number of matches is returned in the X-Result-Count header, and Link carries the
pagination cursors.
Listing the available roles
/api/roles/ enumerates the roles a deployment defines, together with the scope each applies to
and the permissions it carries. Staff can add custom roles alongside the system ones — see
user role management.