PR #262 · pramaan-io/pramaan-functions · merged 2026-06-07
sequenceDiagram autonumber participant user as Firm user participant app as App layer participant db as Postgres user->>app: Clerk JWT + request app->>app: _resolve_membership_role app->>db: query firm_memberships db->>app: role string app->>app: resolve_permissions app->>db: query role_permissions db->>app: permission set app->>app: check + union old claim app->>user: 200 OK app->>app: authz_denied log app->>app: authz_matrix_gap event
| Method | in → out | what it does |
|---|---|---|
_load_permission_cache | () → dict[str, frozenset[str]] | |
resolve_permissions | (role) → set[str] | |
clear_permission_cache | () → None |
Cache plus resolve helper that turn a firm role into its permission set, pulled live from role_permissions.
| new method | signature |
|---|---|
_load_permission_cache | () → dict[str, frozenset[str]] |
resolve_permissions | (role) → set[str] |
clear_permission_cache | () → None |
src/shared/auth/clerk.py+84 −34Resolves the active firm role from firm_memberships and attaches role plus permissions to the auth identity.
| new method | signature |
|---|---|
_resolve_membership_role | (session, user_id, clerk_org_id) → str | None |
role : str | Nonepermissions : Permissions granted by the current firmMigration seven-four creating the role_permissions bridge table and seeding the final V-one matrix.
| new method | signature |
|---|---|
upgrade | () → None |
downgrade | () → None |
branch_labels : str | Sequence[str] | Nonedepends_on : str | Sequence[str] | NoneDeclares the new RolePermission bridge entity that links role strings to permission strings in Postgres.
| new class | signature |
|---|---|
RolePermission | (type) |
role : strpermission : strAdds a dependency that injects the resolved firm role and permissions into request scope for downstream checks.
| new method | signature |
|---|---|
_dep | (request, current_user) → None |