TemplateFREE⏱️ 60-120 minutes
Sharing and Permissions Model Spec Template
Free template for designing sharing and permission systems. Covers role hierarchies, link sharing, inheritance models, guest access, audit trails, and...
Updated 2026-03-05
Sharing and Permissions Model Spec
| # | Item | Category | Priority | Owner | Status | Notes | |
|---|---|---|---|---|---|---|---|
| 1 | |||||||
| 2 | |||||||
| 3 | |||||||
| 4 | |||||||
| 5 |
#1
#2
#3
#4
#5
Edit the values above to try it with your own data. Your changes are saved locally.
Get this template
Choose your preferred format. Google Sheets and Notion are free, no account needed.
Frequently Asked Questions
What is the difference between RBAC, ABAC, and ReBAC?+
RBAC (Role-Based Access Control) assigns permissions through roles: a user is an "Editor" and editors can edit. It is simple to understand and implement. ABAC (Attribute-Based Access Control) evaluates permissions based on attributes of the user, resource, and context (e.g., "users in the engineering department can edit documents tagged 'engineering' during business hours"). It is flexible but complex. ReBAC (Relationship-Based Access Control) defines permissions through relationships (e.g., "the document creator can edit; members of the creator's team can view"). Google Zanzibar popularized this model. For most SaaS products, start with RBAC and extend to ReBAC if you need fine-grained, relationship-driven permissions.
Should we use an authorization service (like Oso, Permit.io, or AuthZed) or build our own?+
For products with simple RBAC (under 5 roles, no inheritance), building your own with middleware checks is reasonable. For products with complex hierarchies, inheritance, resource-level overrides, or multi-tenancy, use an authorization service. These services handle the hard problems: policy evaluation performance, consistent enforcement across services, and audit logging. The engineering time saved on edge cases and security reviews typically justifies the cost within the first quarter.
How do we handle permissions in a microservices architecture?+
Centralize permission evaluation in a dedicated authorization service. Each microservice calls the auth service with (user, action, resource) and gets a boolean response. Do not embed permission logic in individual services. That leads to inconsistent enforcement and security gaps. Cache permission decisions at the API gateway or service mesh level with short TTLs (30-60 seconds) to minimize latency. Invalidate caches when permissions change.
What is the right granularity for permissions?+
Start coarse and add granularity based on customer feedback. V1: workspace-level roles only. V2: add project-level roles. V3: add object-level overrides if customers request them. Each level of granularity adds UI complexity (more dialogs, more settings), API complexity (more checks per request), and cognitive load (users confused about which level controls what). Only add granularity when customers cannot achieve their access patterns with the current model.
How should we handle permission changes for in-progress work?+
When a user's permissions are downgraded during an active session (e.g., removed from Editor to Viewer while editing a document), immediately switch them to read-only mode. Preserve any unsaved edits locally so the user can copy them. Show a clear notification explaining the change. Do not silently prevent saves, and do not discard in-progress work. For live collaborative sessions, see the [collaboration feature template](/templates/collaboration-feature-template) for real-time permission change handling. ---
Explore More Templates
Browse our full library of PM templates, or generate a custom version with AI.