Skip to main content

Data isolation

This page documented the v0.1.8 ownership scheme based on server/src/lib/ownership.ts helpers. v0.2.0 replaced that scheme with a CASL-based role-based access control framework. The same user-visible behaviour holds — every list and every mutation is scoped to the requester — but the gates run through CASL ability checks rather than ad-hoc helper assertions.

See Concepts > RBAC for the v0.2.x model.

v0.1.x

lib/ownership.ts is gone on the v0.2.x line. Routes that previously called assertPersonaOwned, assertSummaryOwned, etc. now call request.ability.can('read', subject('Persona', persona)) (or the matching action) and the per-row condition is enforced by CASL's MongoQuery condition compiled from the RolePermission row's ownOnly flag. The forward-port deltas are listed in the v0.2.1 section of Project > Changelog.

Single-user mode

Behaviour is unchanged. The seeded default user has systemRole = 'system_admin', which compiles to can('manage', 'all') and short-circuits every CASL check. Multi-user provisioning is a configuration change plus user creation, not a code change.