Skip to main content

Roles & Access Control

Access control is the backbone of enterprise trust. ReGenesis implements a layered permission model that combines Role-Based Access Control (RBAC) with Attribute-Based Access Control (ABAC) to ensure that every user sees exactly what they should — and nothing more.

Six User Roles

RoleWhoKey Access
CoacheeThe person being coachedOwn data only, approved insights, 24/7 Sasha companion
CoachThe coaching professionalAssigned clients' data, draft insights, approval workflow
Admin (Program Manager)Enterprise program managerAnonymized aggregates, program metrics, no individual coaching content
Executive (Leadership)C-suite sponsorDashboard-level aggregates only, min 5 person anonymity threshold
Sasha (AI)The AI engineAll data within permission grants, logged and auditable
System AdministratorPlatform operationsInfrastructure only, no coaching content access

Key Security Properties

  • Tenant isolation: Every query is automatically scoped to the current tenant via PostgreSQL Row-Level Security
  • Field-level visibility: Four data tags (client_visible, coach_only, admin_aggregate, system_internal) control what each role can see within their tenant
  • Explicit consent gates: Sasha's permission level (Observe/Analyze/Act) is set per-user with explicit consent
  • Break-glass procedures: Emergency access to restricted data requires dual approval, time-limited tokens, and full audit trails
  • Zero standing admin access: System admins cannot read coaching content by default

Permission Matrix (All Roles x Resources)

ResourceCoacheeCoachAdminExecutiveSashaSys Admin
Own profileCRUDCRUDR-R*-
Other user profiles-R (assigned)CRUDRR*-
Session metadataR (own)CRUD (assigned)R-R*-
Transcripts-R (assigned)--R*-
Draft insights-CRUD--C-
Approved insightsR (own)R (assigned)--R*-
Evidence packsR (L0+approved L1)CRUD--C-
Coach notes-CRUD (own)--R*-
Program metrics--RR--
Audit logs--R--R
System config--R/U--CRUD
Integration tokensCRUD (own)CRUD (own)----

Legend: C=Create, R=Read, U=Update, D=Delete, *=Consent-gated, -=No access


Critical Implementation Note

Row-Level Security (RLS) must be enabled on every table that contains tenant data. The set_tenant_context() function must be called on every database connection before any queries execute. Failure to do this is a cross-tenant data breach vulnerability.

Consent Withdrawal

When a user withdraws consent (e.g., revokes sasha_analyze), the permission engine must immediately block Sasha from accessing that user's data. This is enforced at the API layer AND the database layer. There is no grace period.