User Management
1. Roles
This is the permission that controls the role editor itself — the same screen you’re reading about right now. Because of that, it’s one of the most sensitive checkboxes on the platform: whoever has it can change what any other role (including roles held by SuperAdmins) is allowed to do.Verified enforcement gap: the endpoints behind this module (GET /api/admin/roles,DELETE /api/admin/roles/{roleId}) don’t check these permission checkboxes at all. They’re gated only by a hardcoded check that the caller holds the built-in SuperAdmin or Admin identity role — not by whether their role hasroles:readorroles:deletegranted. In practice, toggling View or Delete here has no effect: only membership in SuperAdmin/Admin controls access to those two actions today.
2. Users
This governs the user list and the actions available from it — looking someone up, editing their profile, deactivating their account, or granting them a one-off extra permission outside of their assigned role.Verified enforcement gap: the same pattern applies here.GET /api/admin/users(the user list),PUT /api/admin/users/{userId}(edit), andDELETE /api/admin/users/{userId}(delete) carry no permission check tied to these checkboxes — they inherit the controller-wide hardcoded requirement that the caller be in the SuperAdmin or Admin identity role. Assigning a role with onlyusers:read(and not the SuperAdmin/Admin identity role) does not currently grant access to these screens.
Tenant Management
1. Tenant Admin
Hitaji 360 is multi-tenant: each organization (“tenant”) that signs up gets its own space, and can subscribe to one or more products (Sacco360, HR, Edu360, and so on). This module covers the admin-side actions around that — listing tenants, linking or unlinking a user from a tenant, suspending/reactivating a user’s membership in a tenant, and provisioning the standard set of roles for a tenant when it subscribes to a new product. It does not cover the separate, standalone Tenant Management application (a different product used for commercial subscription management) — this is the auth-service’s own tenant-administration surface, reached from the same role editor as everything else here.Verified enforcement gap:GET /api/admin/tenants(the tenant list behind View) has the same issue as Roles and Users above — it’s gated purely by the hardcoded SuperAdmin/Admin identity-role check, not by thetenant-admin:readclaim this checkbox grants. Separately, the role-provisioning endpoint (POST /api/admin/tenants/{tenantId}/provision-roles) runs the opposite mismatch: it’s open to any authenticated caller regardless of role or permission claims (used by automated service-to-service calls), so Add here doesn’t gate it either, in the other direction — it’s less restrictive than the checkbox implies, not more.
Related
- SACCO roles & permissions catalog — the equivalent checkbox-by-checkbox catalog for the Sacco360 product modules.