Roles & permissions - basic role permission manage¶
| Stage | Building |
|---|---|
| Status | Partial |
| Design status | In progress |
| Estimate | M |
| Confidence | Low |
| Linear | PIN-262 ↗ PIN-123 ↗ PIN-151 ↗ |
| Linear status | Todo · +1 backlog |
| Cycle | C15 |
| Design | Design ↗ |
| Linear epic | Platform Foundation |
| Module | Settings & Admin ↗ |
Priority: High · Route: /roles
Scope¶
Admin-managed role × permission matrix: Owner/Admin can grant or revoke permissions per role directly (no dev involvement), covering the 12-role hierarchy across 6 categories, with changes taking effect immediately and every change audit-logged. (Source: PIN-262, PIN-123, PIN-151.)
Acceptance criteria¶
- Permissions grid: rows = roles, columns = permissions, checkbox per cell
- Toggling a permission for a role persists and takes effect without a service restart
- Every permission change is audit-logged (who, when, what changed)
- 12 functional roles across 6 categories (Executive/Owner, Admin, Admin Assistant, Finance, PM tiers, Estimating tiers, Compliance, Field)
- Editing the matrix itself is restricted to the Owner role
- Sidebar and action buttons (Add/Edit/Delete) hide per-permission rather than just disabling
- Navigating to a permission-denied route shows a "Not Authorized" page, not a blank screen
- Sensitive financial fields (cost, margin, contract totals, vendor quotes) are masked per role tier on top of standard permission checks
Conor's comments¶
All modules will need to be filterd by access level.
Notes¶
Design has 4 tabs (Access/Classification/Cara/Tenant). Margin leak = launch-critical (PIN-151)
Open question for Conor¶
Confirm PM-tier masking