Penv Cloud
Start free
Docs
Referencesince cloud@2026-09-10

Roles and permissions

The 41 permissions and the 7 built-in roles, and where a grant lands.

Path: Settings > Roles

A role is a named set of permissions. A grant attaches one role to one person or machine identity at one scope.

Permissions

41 permissions, each resource:action. We never store an editor wildcard, so a permission we add later never widens an existing role.

GroupPermissions
Secretssecret:read, secret:reveal, secret:write, secret:delete
Projectsproject:read, project:create, project:update, project:delete
Environmentsenvironment:read, environment:create, environment:update, environment:delete
Machine Identitiesmachine:read, machine:create, machine:issue, machine:revoke
Membersmember:read, member:invite, member:remove, member:role_assign
Rolesrole:read, role:manage
Single sign-onsso:read, sso:manage
Integrationsintegration:read, integration:connect, integration:configure, integration:run, integration:delete
Dynamic Secretsdynamic:read, dynamic:configure, dynamic:generate, dynamic:revoke
Audit Logaudit:read, audit:export
Billingbilling:read, billing:manage
Organizationorg:read, org:update, org:delete
Developer Appsapp:manage

Built-in roles

We seed these into every workspace; you cannot edit them.

RoleForPermissions
OwnerPersonAll 41
AdminPersonAll except org:delete
DeveloperPersonDay-to-day work on values, projects, environments and identities, plus member:read, role:read, integration:read, integration:run, dynamic:read, dynamic:generate, audit:read, org:read
ViewerPersonEvery :read permission
Billing AdminPersonbilling:read, billing:manage, org:read
Secrets ReaderMachinesecret:read, secret:reveal, dynamic:generate
Secrets WriterMachineSecrets Reader plus secret:write, secret:delete

We derive Viewer from the catalog; secret:reveal is not a read permission, so Viewer never holds it. The first person in a new workspace receives Owner.

Owner-only actions

You must be a workspace owner; no permission grants these.

Custom roles

RoutePurpose
/settings/rolesBuilt-in roles; ?tab=custom lists your custom roles. Each tab lists roles For members and For machine identities, with how many of the 41 permissions each holds and how many grants use it
/settings/roles/newClone a built-in role and uncheck permissions; you can select only permissions you hold
/settings/roles/[roleId]A built-in role, read-only, with Duplicate. A custom role opens the editor with role:manage, read-only without. Both show the type, the permission count, the grants (with a link to Members or Machine Identities) and the role it was cloned from

Unavailable on Free (Billing and plans): the Custom tab and /settings/roles/new say so and link to the upgrade.

You cannot grant more than you hold. The picker hides roles carrying a permission you lack at that scope; we re-check on submit, since a form post bypasses the picker.

Grant scopes

ScopeGranted onReaches
WorkspaceSettings > MembersEverything in the workspace
ProjectThe project's Access pageThe project and every environment in it
EnvironmentThe project's Access pageThat one environment

We derive an environment's parent project instead of trusting the form, so a project grant never authorizes another project's environment. A check naming an environment also matches a grant on its parent.

Required permissions

Step-up rules: Security and two-factor.

ActionPermissionStep-upAudit entry
Open the roles list or a rolerole:readNonone
Create a custom rolerole:manageTwo-factor and freshrole.created
Edit a custom rolerole:manageTwo-factor and freshrole.updated
Delete a custom rolerole:manageYesrole.deleted
Grant a rolemember:role_assign at that scopeTwo-factor and freshrole.assigned
Revoke a grantmember:role_assign at that scopeNorole.unassigned

You can't grant yourself a role. Access you hold through elevated access lets you act, but you can't hand it on: a grant, an invitation, a custom role or a machine identity can carry only what you hold without it.

No role.* entry appears in the Audit Log action filter.

Next: Single sign-on.