Port permissions
Port's RBAC shows up in two independent places that reuse the same
roles/users/teams shape: context lake entities (a blueprint's read,
register, update, unregister) and pages/dashboards (read, update).
This skill covers both, plus the roles and ownership model that backs them.
Permissions on a workflow's own SELF_SERVE_TRIGGER node are a separate,
simpler mechanism owned by the port-workflows skill, see
its permissions reference
instead of this one.
Prerequisites
- Go over the
port-getting-startedskill first if this is your first time working with Port. - The blueprint or page whose permissions you're changing already exists.
- If Port's MCP server is connected, use
list_blueprintsto read current blueprint definitions before editing, andsimulate_blueprint_permissionsto test a context lake permission change before applying it. There is no MCP tool that writes permissions directly, every step below applies changes through the raw API, UI, or Terraform. Searchsearch_port_knowledge_sourcesfor anything this skill doesn't cover.
How to configure it
- Know the two building blocks every permission type reuses: Port's
three roles (Admin, blueprint Moderator, Member) and the
$teamownership meta-property that backs everyownedByTeamflag. See references/roles-and-ownership.md. - Set context lake (blueprint/entity) permissions: who can
read,register,update, orunregisterentities of a blueprint, down to a single property or relation, a dynamicreadpolicy, and the built-in permission simulator. See references/context-lake-permissions.md. - Set page and dashboard permissions: who can view or edit a catalog or dashboard page. See references/page-permissions.md.
- Setting permissions on a workflow trigger instead? That's a
different, simpler shape scoped to one
SELF_SERVE_TRIGGERnode, not this skill, use theport-workflowsskill's permissions reference.
Steps 2 and 3 are independent, do whichever the task needs.
Examples
- assets/context-lake-permissions-ownership-and-policy.json:
a blueprint's
entitiespermissions combining role/user/team grants,ownedByTeamregistration, and a dynamicreadpolicy. - assets/page-permissions-patch.json:
a
PATCHbody giving a teamreadaccess and restrictingupdateto Admins.
Common pitfalls
| Symptom | Cause | Fix |
|---|---|---|
Set ownedByTeam and a dynamic read policy on the same scope, only one works |
When entity owner permissions are configured, the dynamic read policy is ignored | Pick one: ownedByTeam for team-based access, policy for anything else |
Granular updateProperties grant has no effect |
A global update permission is also set, global overrides granular |
Remove the global update grant, or fold the property-level grant into it |
User can't register a new entity even though register allows their role |
The entity also has a required property or relation they lack updateProperties/updateRelations access to |
Grant edit access to every required field, not just the top-level register scope |
PATCHing page permissions removed a role's/user's/team's access unexpectedly |
PATCH replaces each key you include entirely; omitting an existing member of that key removes them |
Include the full desired list for every key you send, not just the ones you're adding |
| Terraform permission resource conflicts with UI edits | port_page_permissions fully owns the resource once applied |
Manage a given page's permissions from one place, Terraform or the UI, not both |
Trying to add a dynamic queries/conditions policy to a workflow trigger |
That shape belongs to Port's legacy, deprecated Actions & Automations permissions, not Workflows | Use the simpler policy (combinator/rules over user/userTeams/form context) documented in port-workflows' permissions reference instead |
Quick reference
- Three roles: Admin (everything), blueprint Moderator (everything on one blueprint), Member (read + execute workflows by default).
- Context lake entity permission scopes:
read,register,unregister,update,updateProperties.<property>,updateRelations.<relation>. Each takesroles/users/teams/ownedByTeam;readalso takes a dynamicpolicy. API:GET/PATCH /v1/blueprints/{id}/permissions. - Page permission scopes:
read,update. Each takesroles/users/teams. API:PATCH /v1/pages/{id}/permissions. - For a workflow's
SELF_SERVE_TRIGGERnode permissions (a different, simpler shape scoped to one trigger), see theport-workflowsskill's permissions reference instead of this one.
