The Workforce OS enforces a Role-Based Access Control (RBAC) model combined with hierarchical scope checks to ensure data security and operational integrity. Every API route is protected by FastAPI dependencies that verify both the caller’s role and their ownership or reporting scope before any data is returned or mutated.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/Paramount-Intelligence/HR_Monitoring_System/llms.txt
Use this file to discover all available pages before exploring further.
Role Hierarchy
Roles are ordered from highest to lowest privilege. Each level inherits the spirit of the roles below it but gains progressively broader visibility and write access:UUIDs are internal technical values only. All user-facing UI must display human-readable labels — full names, department names, shift names — never raw IDs.
Role Definitions
- Admin
- HR / Operations
- Manager
- Team Lead
- Employee
- Intern / Junior Employee
Purpose: Full system governance and technical administration.Key Actions:
- Create and manage all user accounts, including other Admins and Managers.
- View organisation-wide analytics and all employee data.
- Configure system settings, shifts, and organisational structure.
- Access and export all audit logs.
- Override or resolve any pending approvals.
Permissions Matrix
The table below summarises the most commonly checked permission keys across all functional areas.✅ = granted, ❌ = denied, ⚠️ = own-data or limited scope only, 👁️ = view-only (UI-level, no explicit permission key).
| Permission Key | Admin | HR/Ops | Manager | Team Lead | Employee | Intern |
|---|---|---|---|---|---|---|
users.view_all | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
users.create | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
users.edit | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
users.deactivate | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
users.suspend | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
users.manage_roles | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
attendance.view_own | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
attendance.view_team | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
attendance.view_org | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
attendance.approve_correction | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
leave.apply | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
leave.approve | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
leave.view_team | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
leave.view_org | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
projects.create | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ |
projects.approve | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
projects.view_all | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
tasks.create_own | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
tasks.create_team | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
tasks.set_priority | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
tasks.set_complexity | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
tasks.view_team | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
eod.submit | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
eod.review | ✅ | ❌ | ✅ | ✅ | ❌ | ❌ |
eod.approve | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
reports.view_own | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
reports.view_team | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
reports.view_org | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
announcements.create | ✅ | ✅ | ❌ | ❌ | 👁️ | 👁️ |
holidays.manage | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
shifts.manage | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
departments.manage | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
audit.view | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
call_recordings.view | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
call_recordings.download | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
call_recordings.delete | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
permissions.manage | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
analytics.view_team | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
analytics.view_org | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
The canonical source of truth for role–permission mappings is
apps/api/app/core/permissions.py (ROLE_PERMISSIONS dict). The table above reflects that file exactly — always refer to the source when in doubt.Hierarchical Rules
Three additional scoping rules layer on top of the static role permissions to prevent cross-team data leakage: Manager Mapping Every non-Admin user should have a reporting manager assigned. This mapping drives which users a Manager or Team Lead can act on behalf of, approve requests for, or view data about. Department Scoping Managers and Team Leads are associated with specific departments. API-level scope checks ensure they can only query or mutate data belonging to their assigned departments — the*_team permission keys are meaningless without this department association.
Ownership Check
Even when a user holds the Employee role, they can only modify entities they own (e.g., their own tasks or leave requests). The service layer enforces this regardless of which role-level permissions are granted.
