lib/permissions.ts.
Permission Model
Two-Tier System
CharleOS combines two concepts for access control:Access Level
System-wide permission tier
- Admin: Full access (Luke)
- Manager: Management features (Simon, Andre, Ben, Nic)
- Staff: Standard access (everyone else)
Work Type
Role-based feature access
- development/design/qa: IC features
- pm: Project management features
- csm: Client success features
- sdr: Limited features
Combined Logic
The permission system uses both factors:manager access level sees the Manager Dashboard, not the IC Dashboard.
Permission Functions
All permission checks are inlib/permissions.ts:
Access Level Checks
Work Type Checks
Dashboard Access
Dashboard Types
CharleOS has 5 dashboard types based on role:
Code:
Sidebar Visibility
Sidebar items are shown/hidden based on permissions:Operational Permissions
Task Management
Quote Management
Client Management
Project Management
Implementation Patterns
Protected Server Component
Protected API Route
Conditional UI Rendering
Complete Permission Reference
Dashboard Access
Sidebar Visibility
Operational Permissions
Adding New Permissions
1
Add Permission Function
Add to
lib/permissions.ts:2
Use in Components
3
Protect Routes
Best Practices
Always Check Permissions Server-Side
Always Check Permissions Server-Side
Client-side checks are for UI only. Always verify on the server:
Use Specific Permission Functions
Use Specific Permission Functions
Don’t check
accessLevel or workType directly:Redirect, Don't Hide
Redirect, Don't Hide
For pages, redirect unauthorized users:
Related Documentation
Authentication
Auth architecture overview
Better Auth
Auth configuration details
Sessions
Session management