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 + Sign is 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 Team for 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 Management is 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.

Edit this page · default