Roles, permission groups and access
The three layers that decide what each member may do, the groups every organization starts with, and the rules that stop anyone climbing.
Everyone in an organization has one role. On top of it they can be put in permission groups, which add organization-wide permissions, and be granted access to individual resources. What a member may do is everything the three give them together.
Nothing in any layer ever takes a permission away. Denial is the absence of a grant, which keeps "why can they do this?" answerable by looking at the member's role, their groups, and the grants that name them.
Layer 1: organization roles
Three roles, deliberately coarse.
| Role | What it covers |
|---|---|
| Owner | Everything. One per organization. |
| Administrator | Everything except appointing administrators and editing the organization's legal details. |
| Developer | Creates things and works on what they created or were given. Sees nothing else. |
A developer may create applications, networks, vaults, image namespaces, databases, database instances, managed services and solutions; connect their own GitHub or GitLab account; use the coding agent and create studio projects; and see who else is in the organization. They see only what they created and what they were given. A colleague's application does not appear in their list and does not answer to its name.
The person who creates a resource holds everything on it, whatever their role.
What only the owner can do
Two permissions belong to the owner alone:
- Appointing and removing administrators. An administrator who could appoint administrators could never be demoted.
- Editing the organization's legal details: the company name, registration numbers and address that invoices and contracts are made out to.
These cannot be put in a permission group or handed to a CLI credential, by anyone, including the owner.
Layer 2: permission groups
Roles are coarse on purpose, and most teams need something in between: someone who deploys but does not delete, someone who looks after the databases, someone who runs the shop. A permission group is a named set of organization permissions. Putting a member in it adds those permissions to their role.
Groups inherit. A group can name other groups as parents, and its members hold everything the parents hold, transitively. Widening a parent widens every group built on it. A group cannot inherit from itself, even through others.
The built-in groups
Every organization starts with these. They are defined by the platform: you can put members in them and build your own groups on top of them, but you cannot change or delete them. A platform upgrade that adds a permission to one reaches every organization at once.
| Group | Inherits from | Adds | In practice |
|---|---|---|---|
application-viewers |
application:read-any, member:read |
See every application and read its logs. | |
deployers |
application-viewers |
application:create, application:deploy-any, network:create, git:connect |
Create applications, and deploy, start and stop every application. Cannot change their configuration or delete them. |
application-maintainers |
deployers |
application:update-any |
Also change the configuration, secrets and exposure of every application. |
application-administrators |
application-maintainers |
application:write-any, application:delete-any |
Everything on every application, including deleting it. |
vault-managers |
vault:create, vault:manage-any |
Create vaults and manage every vault and secret. | |
database-administrators |
database:create, database:manage-any, database-instance:create, database-instance:manage-any |
Create and manage every database and database instance, including backups and restores. | |
service-operators |
service:create, service:manage-any |
Create and run every managed service: Keycloak, Kafka, RabbitMQ, Redis. | |
solution-managers |
solution:create, solution:manage-any |
Deploy and manage every solution: WordPress, WooCommerce, Odoo, n8n and the rest. | |
agent-users |
agent:use, project:create |
Create studio projects and run the coding agent, spending the organization's credit. | |
agent-administrators |
agent-users |
project:manage-any |
Everything agent users can do, on every studio project. |
iam-administrators |
member:read, member:manage, iam:manage |
Invite and manage members, manage groups, and grant access to resources — only what they hold themselves. | |
billing-viewers |
billing:read |
Read the balance, ledger and spend. | |
platform-engineers |
application-maintainers, database-administrators, service-operators, vault-managers |
network:manage-any, namespace:create, namespace:manage-any |
All four in one, plus every network and image namespace. |
The application permissions are slices of one another:
| Permission | On every application in the organization |
|---|---|
application:read-any |
See it and read its logs. |
application:deploy-any |
Also build, deploy, start and stop it. |
application:update-any |
See it, read its logs, change its configuration and secrets, browse its volumes. |
application:delete-any |
See it and delete it. |
application:write-any |
Everything. |
isogrid iam permissions lists every permission with a one-line description,
and isogrid iam groups get <group> shows exactly what a group holds once
inheritance is counted. See Repositories, groups and access.
Layer 3: access to one resource
A grant gives one member, or one group, a set of capabilities on one resource: one application, one database, one vault, one repository. It is how a developer gets into something they did not create, and how an outsider gets into exactly one thing.
Capabilities are specific. On an application, for example:
| Capability | Allows |
|---|---|
app:view |
See it and read its configuration. Implied by every other. |
app:logs |
Read build and runtime logs. |
app:deploy |
Build and deploy it. |
app:lifecycle |
Start and stop it. |
app:configure |
Change resources, networks, environment and exposure. |
app:secrets |
Set container secrets and list their names. |
app:files |
Browse its volumes. |
app:share |
Decide who else may use it. |
app:delete |
Delete it. |
Every other kind of resource has its own set in the same shape: view, the
things you can do with it, share, and delete.
Presets bundle the common cases, so most grants are one choice:
| Resource | Presets |
|---|---|
| Application | viewer (view, logs) · operator (also deploy, start and stop, browse files) · maintainer (everything but delete) |
| Repository | repo-viewer · repo-deployer · repo-maintainer · repo-admin |
| Database | database-user (connect) · database-owner |
| Database instance | instance-user · instance-operator (also operate and back up) · instance-manager (everything but delete) |
| Vault | vault-consumer (attach secrets to applications) · vault-editor (also change them) · vault-manager |
| Image namespace | namespace-puller · namespace-publisher (also push) · namespace-manager |
| Image | image-consumer (deploy from it) · image-manager |
| Network | network-user (attach applications) · network-manager |
| Managed service | service-user (connection details) · service-operator (also operate) · service-manager (everything but delete) |
| Solution | solution-user · solution-operator · solution-manager (everything but delete) |
| Studio project | project-viewer · project-collaborator (prompt the agent, edit, wake the sandbox) · project-maintainer (everything but delete) |
A preset is expanded when the grant is written. The grant itself is a plain set of capabilities, so you can start from a preset and remove one thing.
A grant covers the resource, not a copy of it. Granting on an application covers its service, its builds and its volumes. Granting on a repository covers every application built from it, including ones created later.
Grants are made from the resource's sharing settings in the console, or for
repositories with isogrid repos grant.
You can only hand out what you hold
This is the rule that makes it safe to let people other than the owner manage access. It applies everywhere:
- Creating or changing a group. You cannot give a group a permission you do not hold, or make it inherit from a group that holds more than you.
- Putting someone in a group. You cannot add a member to a group that holds a permission you do not.
- Granting on a resource. You need that resource's
sharecapability, and you can grant only capabilities you hold on it yourself. Someone who can deploy an application cannot give anyone the right to delete it. - Revoking a grant. You can withdraw only a grant that gives no more than you hold. A grant made by someone with more access stays until someone with that much removes it.
Managing groups also needs the iam:manage permission, which owners and
administrators hold and iam-administrators adds. So an IAM administrator who
may manage members but not billing cannot build a "Billing" group and join it.
CLI credentials
A credential made with isogrid login acts as you, in one organization, and is
limited in three ways:
It never holds more than you do. Its scopes are a ceiling, checked against your role and groups on every request rather than copied when it was issued. Take someone out of a group, or demote them, and every credential they minted narrows at the same moment.
It holds only what was left ticked on the approval page. member:manage,
iam:manage, organization:manage and network:share are offered but not
ticked by default, because their effects land on other people.
Some things it can never do, whatever it asks for and whoever approves it: read or change billing, appoint administrators, edit the organization's legal details, or mint and revoke credentials. Those want a person at a keyboard.
Scopes narrow organization permissions. Access that comes from a grant on a
resource, or from having created it, is not affected by them, so a narrow
credential still reaches what you were invited to. isogrid whoami prints what
a credential will actually be allowed; that is the list to read when something
is refused. See Deploying from CI/CD for minting one for a
pipeline.
Examples
Let the QA team deploy, but not delete
Create a group qa and put the testers in it. What to give it depends on how
widely they work:
- Every application: make
qainherit fromdeployers. They can create applications and deploy, start and stop all of them, and change and delete none. - Only the staging applications: leave the group with no permissions, and
grant it the
operatorpreset on each staging application. They can deploy, start, stop and read logs there, and see nothing else.
isogrid iam groups create --name QA --inherits deployers
isogrid iam groups add-member qa tester@acme.example
When someone joins QA, adding them to the group is the whole of onboarding. When they leave it, they lose everything the group gave them at once.
Hand one solution to a marketing agency
The agency's contact needs to run the shop and nothing else.
- Invite them to the organization as a developer. On their own, they see nothing they did not create.
- On the shop solution, grant them the
solution-operatorpreset: they can see it, read its connection details and admin login, and start, stop and redeploy it. Choosesolution-managerif they should also change its settings; neither preset lets them delete it. - When the engagement ends, revoke the grant or remove them from the organization.
They never see your applications, databases or bill, and cannot pass the shop on
to anyone else, because neither preset includes sol:share.
Give a contractor one repository
See Git repositories: the member who connected the
repository grants the contractor repo-deployer on it, and the contractor can
build and deploy the applications made from it without being given each one.
Edge cases worth knowing before you meet them
A member cannot find an application that exists. Holding nothing on a resource looks the same as it not existing, so members cannot discover what colleagues run by guessing names. Grant them access, or put them in a group that sees every application.
"You do not have 'app:deploy' on this application" from someone who can see it. They hold something, so the resource is not hidden, but not that. The error lists what they hold.
An administrator cannot build from a colleague's private repository. Repositories follow their own rules: the member who connected the account decides, and a private repository is closed even to the owner. See Git repositories.
A built-in group cannot be edited. Build your own on top of it with
--inherits.
A CLI command is refused that works in the console. The credential was
approved with fewer permissions than you hold. isogrid whoami shows which;
isogrid login --force approves a wider one.
What to read next
- Git repositories — who may build from what.
- Repositories, groups and access — the same, from the terminal.