Portal Modules and Role Access
On this page
Purpose
RBAC Matrix documents endpoint-level enforcement (which Keycloak realm role can call POST /v1/eligibility/determine, etc.). This page documents the UI surface — which screens / portal modules each role can access, and what each role can do inside each module.
The endpoint matrix is enforced at the API boundary (Claims::require_* helpers). The portal-module matrix is enforced at the route + render layer of canopy-web (Askama + Alpine.js). Both layers must agree — this page documents the contract.
Worker portal (canopy-web)
Six roles per Keycloak realm, matching the endpoint matrix:
| Module | Caseworker | Eligibility Specialist | Supervisor | Quality Control | Admin |
|---|---|---|---|---|---|
Dashboard |
View |
View |
View + Team |
View |
View + System |
Case Search |
Search + View |
Search + View |
Search + View |
Search + View |
Search + View |
Application Intake |
Create + Edit |
Create + Edit |
Create + Edit + Approve |
View |
View |
Determination |
View |
Determine + Sign |
Review + Override |
Review |
View |
Notices |
Generate |
Generate |
Generate + Approve |
View |
View |
Appeals |
File + View |
View |
Schedule + Decide |
View |
View |
Renewals |
Process |
Process |
Assign + Monitor |
Review |
View |
Audit Logs |
— |
— |
View Own Team |
View All |
View All + Export |
User Management |
— |
— |
— |
— |
Full Access |
Notes:
-
View + Team(Dashboard, Audit Logs) means the role sees rolled-up data for their assigned team in addition to the per-case view. -
View + System(Dashboard) for admin includes operational telemetry that’s not in the audit-log surface. -
Determine + Signis the only entry point that produces the signed determination artefacts under ADR-002. Caseworker and QC roles are strictly read-side on this module. -
View Own Teamfor supervisor (Audit Logs) is the standard separation-of-duties boundary — supervisors review their team’s actions; QC reviews any team’s actions; admin exports. -
User Managementis admin-only — provisioning happens via Keycloak realm administration; the portal exposes a thin self-service surface for the admin role.
Applicant portal (canopy-portal)
canopy-portal is a shipped Dioxus 0.7 fullstack application, containerized on port 8090. Per ADR-008 / ADR-026 it authenticates applicants via reference number (HH-… code + passcode, no Keycloak roles) with Redis-primary opaque-token sessions — Postgres-free. The applicant role is mutually exclusive with worker-side roles. Module surface:
| Module | Applicant |
|---|---|
Application Intake |
Create + Submit (own only) |
Application Status |
View own |
Notices |
View own (PDF download) |
Renewals |
Submit own renewal forms |
Appeals |
File own appeal |
The lookup / apply / recover flows behind this matrix are live (Dioxus 0.7 fullstack, reference-number auth, Redis-primary sessions, containerized on 8090); this matrix is the authorization contract those flows enforce.
Cross-references
-
RBAC Matrix — endpoint-level enforcement (the API counterpart of this page).
-
Auditor Handbook — single-page index that links both this page and the endpoint matrix.
-
Caseworker Guide (SNAP) — operational guide written from the caseworker role’s perspective.
Drift watch
The matrix above was authored from the documentation-completeness plan’s source-of-truth table. Future portal additions (e.g., post-UAT TANF / Medicaid / CAPS / WIC modules) must add rows here AND update RBAC Matrix. The Antora nav.adoc lists this page under Operations.