by Ta-Tech Solutions All documents

04 - User Roles & Permissions

CivicLoop by Ta-Tech Solutions Purpose: Define every kind of user, what each can see and do, and the access-control model that keeps residents, County staff, and County leadership in their correct lanes.


1. The principle

CivicLoop has two populations of users with a hard wall between them:

Access control is role-based, tenant-scoped, and least-privilege: a user sees the minimum needed to do their job, and never crosses the County (tenant) boundary. This model is inherited from the Ta-Tech engine, the same RBAC + row-level isolation that runs the healthcare and workforce platforms.

2. The roles

2.1 Resident (the public)

The member of the public. Can act with no account at all - a phone number is enough to file and be notified. An optional lightweight account adds a personal request history and saved locations.

A resident can:

A resident cannot:

2.2 Agent

Frontline County worker in a department - the person who resolves requests. The most-used staff role.

An agent can:

An agent cannot:

2.3 Supervisor

Leads a team of agents within a department.

A supervisor has everything an agent has, plus:

A supervisor cannot:

2.4 Department Head

Accountable for a whole department's service performance.

A department head has everything a supervisor has, plus:

2.5 311 Director

Leads the Office of Community Relations / the 311 function. The cross-department view.

A 311 Director can:

A 311 Director is the primary audience for the system's intelligence - the person who manages the system rather than the queue.

2.6 County Admin

The top staff role. The configuration owner. Held by very few people.

A County Admin can do everything a 311 Director can, plus:

A County Admin cannot quietly do harm without a trace: every configuration change writes an immutable Audit Log entry.

New 2026-05-18 capabilities on the County Admin surface (/admin):

2.6b The new role-scoped surfaces

Surface Owned by Notes
/admin autopilot dial + self-heal Run now + location posters County Admin Audit-logged. Self-heal is also reachable as the cron endpoint /api/cron/self-heal (Document 08), gated by the optional SELFHEAL_CRON_TOKEN env.
/dashboard forecast panel "Run forecast now" 311 Director (and County Admin, who inherits the Director surface) Director-triggered. Writes one row per (category, council_district) into predicted_issues.
/dashboard equity panel 311 Director Read-only view; the data comes from service_areas.council_district and locations.council_district.
/dashboard upcoming visits panel 311 Director and the department's Supervisor / Department Head (scoped) Reads scheduled_visits for the staffer's scope.
/console/[requestNumber] schedule visit + visits list Agent and above Creating a visit fires SMS + email with a .ics attachment to the resident. Cancel + complete write Request Events.
/channels and /channels/[slug] Any staff member (department channel visible to its department, #311-all to everyone) Slash commands (/help, /open, /breaches, /summary CP-...) are deterministic - no AI call. @loop triggers the AI persona (Document 07).
/council/[district] A council member or their staff, plus 311 Director and County Admin The view is scoped to one of PG County's 9 districts. Shows totals, open, resolved, SLA breaches, top categories, recent requests, and the district's slice of the forecast. Council-member sign-in is a future seam; for the pilot, the County Admin grants the access.
/survey/[token] Resident (the original requester only; token is single-use) No auth, no PII, no account. The token IS the credential.
/public Anyone, anywhere, no account NOT locale-scoped; one URL. Shows aggregated last-7-day numbers and an anonymized SVG scatter map. CSV at /api/public/weekly.csv.

2.7 System / AI (not a person)

The AI components and background jobs act under a system identity. Every action they take - classify, route, predict, notify - writes an AI Decision and/or Audit Log row attributed to "ai" or "system," never to a person. This keeps the human audit trail clean and the AI accountable.

3. The permission matrix

R = Resident, A = Agent, S = Supervisor, DH = Department Head, D = 311 Director, CA = County Admin.

Capability R A S DH D CA
File a service request Y Y Y Y Y Y
Track own requests Y Y Y Y Y Y
See public map Y Y Y Y Y Y
See own department's queue - Y Y Y Y Y
Claim / work a request - Y Y Y Y Y
Move workflow to RESOLVED - Y Y Y Y Y
Override AI routing (with reason) - Y Y Y Y Y
Comment to resident - Y Y Y Y Y
Close (confirm) a request - - Y Y Y Y
Reassign across agents - - Y Y Y Y
Handle escalations - - Y Y Y Y
See whole-department analytics - - Y Y Y Y
Manage department staff - - partial Y - Y
Set department hours / SLA proposals - - - Y Y Y
See ALL departments' requests - - - - Y Y
Director Dashboard (county-wide) - - - - Y Y
Export reports / open-data - - - - Y Y
Manage categories / routing rules - - - - - Y
Manage SLA policy library - - - - - Y
Manage departments & all staff - - - - - Y
Configure integrations - - - - - Y
Time-limited permission grants - - - - - Y
See full audit log - - - - partial Y
Schedule a visit on a request - Y Y Y Y Y
Upload progress photo (in assigned or in_progress) - Y Y Y Y Y
Post in department channels - Y Y Y Y Y
@loop the AI persona in a channel - Y Y Y Y Y
Open /council/[district] scoped view - - - - Y Y
Open /public transparency portal Y Y Y Y Y Y
Receive auto-survey + answer it Y - - - - -
Set the Autopilot dial (off/route/full) - - - - - Y
Run self-heal "Run now" (admin) - - - - - Y
Run "Run forecast now" (director) - - - - Y Y
Build location-poster QR - - - - - Y

"partial" = scoped: a Supervisor manages only their own agents; a 311 Director sees audit entries for requests, not for county configuration.

4. Authentication

Population How they sign in
Residents Phone number + one-time SMS code, or email + one-time code. Optional: set a PIN for faster re-entry. No password to forget - this directly fixes the documented "password loop" failure mode. Anonymous filing needs no sign-in at all.
County staff County email + password + two-factor (TOTP). Two-factor is mandatory for all staff roles - this is government data. Trusted-device option remembers a browser for 30 days. SSO against the County's identity provider is supported as a configuration option (Document 05).

5. Why this model is defensible to a County panel


Next: 05 - System Architecture.

PreviousDomain Model
CivicLoop - Ta-Tech Solutions - Architecture & Design Documentation