Skip to content

RBAC matrix — roles × permissions

What it is

The canonical reference for who can do what in ManpowerIQ: the full role × permission matrix, reproduced from a live read of the seeded roles / permissions / role_permissions tables (BU 1, Demo Business Unit, 2026-06-10). The verified totals are 97 permissions across 9 roles.

This is the authoritative source the Roles & permissions user-guide page points to, and the gating used by the Phase-4 task pages. Source: Sprint/RBAC_RolePermission_Extract.md.

Why it's built this way

ManpowerIQ's access model is permission-centric (see Authentication & RBAC): a global catalog of permission codes, BU-scoped roles that bundle them, and runtime [Authorize("x.y")] checks. The matrix below is the concrete grant data behind that model — the actual rows seeded into role_permissions. It is presented grouped by capability so a developer adding a guarded action can find the relevant permission and see which roles already hold it.

The 9 roles

The MIQ-003 baseline seeded 7 roles; HR_DIRECTOR and COO were added in later sprints (post-baseline), both with a narrow attendance + reconciliation scope.

id Code Abbr. Name Scope
1 SYS_ADMIN SA System Administrator Full access — all 97 permissions
2 HR_ADMIN HRA HR Administrator Employees, skills/certs, leave config, audit (65 perms)
3 PLANNER PLN Planner Demand, rosters, allocation runs (55 perms)
4 MANAGER MGR Department Manager Approve/publish, approvals, validate attendance (46 perms)
5 SUPERVISOR SUP Supervisor Capture/validate attendance, team views (34 perms)
6 EMPLOYEE EMP Employee Self-service only (6 perms)
7 VIEWER VWR Viewer Read-only across the product (23 perms)
8 HR_DIRECTOR HRD HR Director Post-baseline — attendance + reconciliation (7 perms)
9 COO COO Chief Operating Officer Post-baseline — attendance + reconciliation (8 perms)

How to read the matrix

  • Columns use the abbreviations above (SA HRA PLN MGR SUP EMP VWR HRD COO).
  • A ✓ means the role holds that permission.
  • SYS_ADMIN holds every permission, so its column is ✓ on every row by definition.

A note on completeness. The source extract enumerates the grants of the 8 non-admin roles explicitly — 92 distinct permission codes — and records that SYS_ADMIN holds all 97. The matrix below lists those 92, plus allocation_run.debug (named in the extract's quick-reference) and admin.config / admin.roles / admin.users (recovered from the Phase-6 controller scan) — all SYS_ADMIN-only — = 96 named permissions. That leaves 1 of the 97 held by SYS_ADMIN only and not yet named (97 − 92 = 5 SYS_ADMIN-only; 4 now named, 1 still unnamed). Rather than invent a code, it's left as the unenumerated residue; to recover it, query permissions directly at HEAD.

The matrix (by capability)

Administration & audit

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
admin.audit
admin.config
admin.roles
admin.users

admin.config / admin.roles / admin.users are SYS_ADMIN-only administrative permissions, recovered from the Phase-6 controller scan (they gate Settings-write, Roles/Permissions, and Users respectively). They were among the previously-unnamed SYS_ADMIN-only residue — see the completeness note above.

Allocation rules & runs

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
allocation_rule.execute
allocation_rule.read
allocation_rule.write
allocation_run.debug
allocation_run.execute
allocation_run.lock
allocation_run.read
allocation_run.write

Demand planning

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
demand.confirm
demand.create
demand.edit
demand.override
demand.read
demand.template_manage
demand.template_read
demand.view
demand.write
demand_reason.config
demand_reason.view

Rostering & publish

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
roster.approve
roster.create
roster.edit
roster.publish
roster.view
roster.view_own
shift_assignments.override_certification

Attendance & reconciliation

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
attendance.capture
attendance.edit
attendance.import
attendance.review
attendance.validate
attendance.view.all
attendance.view.own
attendance.view.scoped
attendance_status.config
attendance_status.view
reconciliation.validate
reconciliation.view

Leave

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
leave.approve
leave.config
leave.request
leave.view
leave_request.approve
leave_request.submit
leave_request.view_all
leave_request.view_own

Cross-pool, overtime & early-release

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
cross_pool.approve
cross_pool.request
early_release.approve
early_release.submit
ot.approve

Employees, skills & certifications

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
cert.create
cert.edit
cert.view
certifications.manage
certifications.read
employee.create
employee.delete
employee.edit
employee.import
employee.view
employee_group.read
employee_group.write
grade.config
grade.view
skill.assign
skill.config
skill.create
skill.delete
skill.edit
skill.view

Pools

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
pool.read
pool.write
pool_lending_rule.read
pool_lending_rule.write

Calendars, shifts & holidays

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
calendar.config
calendar.view
holiday.config
holiday.view
shift_pattern.config
shift_pattern.view
shift_template.config
shift_template.view

Org reference data

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
node_type.config
node_type.view
terminal.config
terminal.view

Imports

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
imports.run
imports.view_history

Dashboards & self-service

Permission SA HRA PLN MGR SUP EMP VWR HRD COO
dashboard.view
dept_dashboard.view
profile.view_own

Gotchas / constraints

  • allocation_rule.write is SYS_ADMIN + HR_ADMIN only. A PLANNER can run the engine (allocation_run.execute) but cannot edit rule sets. A common mis-assumption.
  • allocation_run.debug is SYS_ADMIN only — this gates the ineligibility-reason detail on a run (finding F6). Planners can't see why a candidate was excluded without it.
  • Leave has two gating styles. A newer chain (leave_request.submit / leave_request.approve) and a legacy gate (leave.approve = SYS_ADMIN + MANAGER) coexist. Check which an endpoint uses.
  • HR_DIRECTOR and COO are narrow, not senior-of-everything. Despite the executive names, each holds only 7–8 attendance/reconciliation permissions — not a superset of HR_ADMIN.
  • This is the BU-1 seed. Roles are tenant-scoped, so another BU's roles could in principle be edited away from this seed; this matrix is the shipped default.
  • SYS_ADMIN totals 97, but only 96 are named here — see the completeness note above. Don't treat the named rows as the entire catalog (1 SYS_ADMIN-only code remains unenumerated).

Build status

Available — RBAC schema, the 9-role seed, and the 97-permission catalog all ship and are runtime-enforced (sheet 01 §build-status). The matrix is a live extract from the seeded tables (Sprint/RBAC_RolePermission_Extract.md, 2026-06-10).