Skip to main content

What is a Permission?

A permission defines a specific access right: the ability to perform an action on a resource type matching a pattern. Permissions are the atomic units of access control in Bedrock.

Permission Properties

A permission has no condition field. JSON Logic conditions attach to the role-permission edge (BedrockRolePermission.condition)—see Conditional Permissions.

Creating Permissions

Permission Keys

The key field uniquely identifies a permission within a scope. The convention is:
Examples:
  • document:read:* — Read any document
  • document:write:* — Write any document
  • document:delete:* — Delete any document
  • user:manage:* — Manage any user
  • report:export:financial — Export financial reports

Actions

Actions describe what can be done. Common patterns:

CRUD Actions

Domain-Specific Actions

Resource Types

Resource types categorize what the permission applies to:

Resource Patterns

Patterns specify which resources the permission applies to:
Pattern matching currently supports only * (all resources of the type) and exact string match against the resource’s id/pattern. Prefix, category, or glob patterns such as financial/* are not evaluated as globs—a permission with resourcePattern: "financial/*" would only match a resource whose identifier is the literal string financial/*. To scope by ownership or category, use conditional permissions with tags instead.

Conditional Permissions

A permission itself has no condition field. Conditions attach to the role-permission edge (condition)—they qualify a permission for a specific role, so the same permission can be unconditional for one role and conditional for another.
The context exposes subject.* (incl. subject.meta.*), the resolved resource core fields, resource tags/tagList, the trusted clock (time.hour, time.dayOfWeek), and any top-level custom context keys. See Conditional Permissions for the full variable list, the trusted-clock behavior, and fail-closed evaluation.

Permission Inheritance

Permissions defined at a parent scope are available in all child scopes:

Permission Overrides

You can disable a permission at a child scope:
Or revoke a permission for a specific role (role-permission override):
Override state values: permission and role overrides use active / inactive / inherit; role-permission overrides use grant / revoke / inherit.

Connecting Permissions to Roles

Permissions are granted to subjects through roles:

Common Permission Patterns

Tiered Access

Agent Restrictions

Feature Flags as Permissions

API Reference

Create Permission

Create a new permission

Get Permissions by Scope

List permissions in a scope

Create Role Permission

Add permission to a role

Permission Overrides

Override permissions at child scopes

Next Steps

Conditional Permissions

Add JSON Logic conditions for dynamic access control

Evaluation

Learn how Bedrock evaluates permission checks