How access is decided
1
Role
Every member has one role. The built-in roles are
tenant_owner, tenant_admin and tenant_member; you can add custom roles. A role holds a set of actions, such as project:modify or member:invite. List Roles shows the roles of your team, and the permission catalog lists every action you can grant.2
Permission rules
A permission rule allows one more action, either for a custom role or for a single member. The built-in roles cannot be changed.
3
Access groups
An access group bundles permissions, and optionally a list of resources, and gives them to every member you add to it.
4
Access scope
An access scope narrows a role to listed resources of a type — for example, only two of the team’s workspaces. A scope only limits: it never grants more than the role allows. A resource type with no scope is unrestricted.
5
Resource access
On a single resource, you can give a member a permission level (
read, write or manage), or add the resource to someone’s restricted scope. See Resource access below.Resource access
The resource access endpoints work the same way for every resource type that can be shared one resource at a time. The path names the type and the resource:Conditional writes
Writes that replace a whole list — access scopes and an access group’s permissions — return anETag header. Send it back in If-Match on the next write: if someone changed the list in the meantime, the write is refused with 412 and nothing changes.
Protecting admins
Some changes affect what an admin can do: giving someone an admin role, or narrowing an admin’s access. Only the team owner or an admin can make them. When anyone else tries, the request is refused with403, and data.operation in the error names the change — see Errors.