Carry roles and permissions in sessions and access tokens for consistent access checks
Explicit permission checks
Check permissions in application code to allow or block actions at runtime using clear, readable logic.
Unified AuthN + AuthZ SDK
Use a single SDK to authenticate users and enforce authorization together, without stitching multiple systems.
Fine-grained access for complex access scenarios
Model precise permissions across hierarchies, relationships, and context as your 
product grows beyond simple role-based access.
Hierarchical access models
Define permissions based on how your product is structured—orgs, workspaces, projects, and resources.
Inherit access across nested entities
Override permissions at specific levels
Avoid duplicating roles per resource
Relationship-based permissions
Control access based on how users relate to entities—not just the role they hold.
Google Docs–style sharing patterns
Shared access across teams or orgs
Different roles across different entities
Conditional & contextual access
Add conditional rules when access depends on context such as time, environment, request attributes, or resource state
Time-bound access and expiration
Environment or state-based rules
Request-aware constraints
Fine-grained access for autonomous agents
AI agents shouldn’t inherit broad user access or long-lived credentials. They need scoped, time-bound authorization designed for autonomous execution.
Single user identity, multiple apps
Ephemeral credentials
Issue short-lived access that expires automatically, reducing blast radius by default.
Granular access for each app
Time-bound scopes
Limit what an agent can do and for how long—no permanent permissions.
Granular access for each app
Traceable identity
Every agent action maps back to a user/org context for audit and accountability.