Dynamic Permissions

Most platforms force you into predefined roles or rigid permission systems. Canopy lets you define your own permission vocabulary. Canopy stores, enforces, and evaluates it without hardcoding access rules into your application.

Your Permission Model: Not Ours

You define your own permission keys, like invoice.read, report.export, or identity.manage. Canopy doesn't interpret them. It enforces them consistently across your hierarchy. Each account defines its own model, completely isolated from every other tenant.

Stop Hardcoding Access Logic

Without dynamic permissions, access checks live in your codebase. Every new feature requires new conditionals. Changing access rules requires deployments.

Without dynamic permissions

  • Permission checks hardcoded in your app
  • Every new feature needs new conditionals
  • Changing access rules requires a deployment

With Canopy

  • Permissions are data, not code
  • Roles updated without redeploying
  • Access rules evolve with your product

Flexible Permission Structure

Permissions follow a simple resource.action pattern, invoice.create, report.export, user.deactivate. Unlimited depth is supported for complex domains like billing.invoice.approve. Group permissions by category for dashboard organization. The structure is yours to define.

Roles Bundle Permissions

Permissions are never assigned directly to users. You define permissions, bundle them into roles, then assign roles at nodes. A 'Regional Manager' role might include report.view, report.export, and identity.manage. Change the role's permissions and every holder is updated instantly.

Evaluated in Real Time

At runtime, your application asks Canopy: does this user have permission X at node Y? Canopy evaluates direct role assignments, inherited roles through the hierarchy, and active time windows, then returns a deterministic answer in a single API call.

Time-Bound Permissions

Grant access that starts in the future, expires automatically, or supports temporary roles for contractors. No cleanup required, expired access is ignored automatically at evaluation time.

Evaluate at Scale

Check multiple permissions or identities in one request. Build permission-aware UIs that show or hide features based on real access. Filter data based on scope. Avoid repeated API calls. Designed for real-time applications.

Ready to simplify access control?

Create an account and have authentication and hierarchical access control running today.