Asset UI Permissions and Visibility
Summary
Asset UI access is governed by navigation visibility rules and route guards driven by module features, permissions, and roles. These are frontend visibility and feature gates only. Critically, they are not backend authorization: the asset compatibility endpoints are tenant-scoped but not role-authorized.
Audience
- Developers configuring nav and guards.
- QA engineers validating visibility per role.
- Support engineers explaining access behaviour.
- Security engineers assessing enforcement boundaries.
Reference Content
Navigation visibility
| Nav item | Path | Group | Permissions | Roles | Audience |
|---|---|---|---|---|---|
asset-requests (Assets) | /hr-operations/assets | Workforce | ["hr-operations"] | ["hr-admin","it-asset-admin"] | admin/manager |
ess-assets (Assets) | /assets | Self Service | ["Asset.ViewSelf","hr-operations"] | n/a | employee |
The admin item uses moduleFeature "hr-operations" and icon ClipboardList. An it-asset-admin role exists and also appears on the Operations Dashboard nav item.
Route guards
ProtectedRoute uses a longest-prefix match over routeFeatures. The /hr-operations prefix rule requires moduleFeature hr-operations AND one of its permissions (which include hr-operations); /hr-operations/assets is governed by this rule. /assets has no routeFeatures entry and is therefore authenticated-only at the route level, with navigation visibility gated by Asset.ViewSelf. Super-admin roles are redirected out.
moduleFeature and permission gates
The admin route requires both the module feature and a matching permission. The ESS route relies on authentication plus a navigation-level permission gate rather than a route-level feature rule.
Roles
Roles referenced include hr-admin and it-asset-admin for admin asset access. Employee access is audience-based with the Asset.ViewSelf permission gating navigation.
Critical enforcement point
Frontend visibility is not backend authorization. The asset compatibility endpoints are tenant-scoped but not role-authorized at the backend (anonymous-by-design private mesh). A client that reaches those endpoints is constrained by tenant scope, not by the frontend role/permission gates. Backend authorization for asset actions should be classified as Requires confirmation and must not be assumed from UI gating.
Source References
UI/salary-ui/apps/client-hrms-portal/src/components/AppLayout.tsxUI/salary-ui/apps/client-hrms-portal/src/utils/ProtectedRoute.tsxmicroservices/src/asset-service/Api/AssetCompatEndpoints.cs
Related Articles
See Also
Keywords
permissions, visibility, route guard, module feature, tenant scope
Revision Information
- Status: Draft
- Last reviewed: 2026-07-17
- Review cycle: Quarterly