A line manager gets a scoped version of the same workspace an HR Admin sees: same dashboards, same pages, but the data is bounded to their reporting tree. This is a deliberate departure from the way many platforms ship — where managers receive a workspace-wide view that does not match their position.
The scoping rule, in short
When the user's role has the My reporting line data scope (the seeded Line Manager role does), the server computes their "team scope" automatically:
- Direct reports (level 1, via
Person.managerId). - Indirect reports (levels 2 through 6).
- The manager themselves, included in scope.
This rule is enforced on every Develop and Grow API: assigning assessments, editing growth plans, ranking role matches, gap analysis, recommendations. Any attempt to read or write a person outside the scope returns a 403 with a bilingual error message.
What a line manager sees vs an HR Admin
| Surface | HR Admin | Line Manager |
|---|---|---|
Home /app | Workspace-wide | (same layout) |
/app/grow — growth-plan counts | Workspace-wide | Their tree only, with "(your team)" labels |
/app/grow/my-team | Direct reports + "View workspace-wide" link | Direct reports only |
/app/develop — pending, completed, by type | Workspace-wide | Their tree only |
/app/people | All employees and candidates | Their reporting tree only |
/app/grow/succession | All candidates for any critical role | Only candidates inside their tree |
/app/grow/plans/[personId], assessment answers, case-study review | Anyone | Only people in their tree (others show not found) |
/app/data-editor — People sheet | All people | Their tree only, read-only (the Line Manager role can't save here; a custom reporting-line role that can save is refused for anyone outside its tree) |
/app/settings/* | Available | Not in sidebar |
The "My team" page
A "My team" link appears in the sidebar under Grow for both HR Admins and line managers. The page at /app/grow/my-team is a snapshot of the manager's direct reports (level 1) as cards showing:
- Person name and current role.
- Match score for their target role (if set), with a coloured progress ring.
- Succession-readiness chip (Ready now / Emerging / Gap / Not ready).
- Growth-plan status (
Active n/m milestonesorNo plan). - Top three competencies with levels.
Clicking a card opens the full profile at /app/people/[personId].
"My team" vs the scoped /people table
Both are bounded by the manager's scope, but:
- My team — level-1 reports only, oriented toward readiness and development, summary-card layout.
- /people — full reporting tree (levels 1-6), table view with sort and filter.
Use the first for daily focus, the second for a wider review.
What if the management relationships are not set?
If HR has not set managerId on any person record, a line manager's scope is empty (it contains only themselves). Their dashboards will look bare. To fix it:
- Open
/app/people. - Open the person's profile.
- Set their manager in the "Line manager" field.
Every person whose managerId is updated immediately enters their manager's scope.
Exceptions — when scoping does not apply
- Employee portal
/me— every user, manager or not, sees their own profile in full regardless of scope. - Assessment template library — readable by both line managers and HR, since it is configuration, not person data.
/app/hire— does not apply manager scoping in this release; restricting requisitions to assigned managers is on the v0.6 watch list.
How to test this
Take a manager with a two-level reporting chain, for example:
هدى (manager)
├── منال (direct report)
│ └── محمد (indirect report — level 2)
└── عبدالعزيز (direct report)
Sign in as هدى to see a four-person scope (herself + two direct + one level-2). Open /app/grow/my-team to see only her direct reports (منال and عبدالعزيز). Open /app/people to see the full tree.