Capability · Admin & Security

Access built on
deny-by-default.

Compass uses four-role RBAC — Owner, Admin, Manager, Employee — backed by deny-by-default row-level security and org-scoped data isolation. An approval inbox gates role elevation. An append-only audit log records every significant action. Access has to be earned and granted — it is never assumed.

Deny-by-default RLS enforced at the database layer. Org data never bleeds across tenants. Audit log is append-only — no row is deleted.

What it is

Security that lives in the data layer, not the UI

Most apps trust the UI to enforce access. Compass enforces access at the database layer — deny-by-default row-level security (RLS) means that even if a UI bug surfaces a button, the data query returns nothing unless the role is explicitly authorized. Org isolation is structural. There is no configuration switch that could accidentally expose one org's data to another.

🔒
Deny-by-default RLS
Every table in Compass has row-level security policies. The default is deny — nothing is readable unless a policy explicitly grants access for the authenticated user's role and org. Access is additive, not subtractive. You cannot accidentally over-grant.
🏛
Org-scoped data isolation
Every data row is tagged with an org ID. RLS policies enforce that every query filters to the authenticated user's org. Cross-org data access is not possible via the application layer — it requires direct database access, which is logged and access-controlled independently.
📝
Append-only audit log
Every significant action in Compass — role changes, data uploads, approval decisions, Report Card views, audit log reads — is written to an append-only log. Rows are never updated or deleted. The log is tamper-evident by design.
Role × permission matrix

What each role can — and cannot — do

The matrix below shows exactly which capabilities each role has access to. Partial access () means scoped to own data only — a manager can view team data, not cross-team. This is enforced at the data layer.

Compass · Admin & Security — Role permission matrix Owner Admin Manager Employee
Capability Owner Admin Manager Employee
View own data (KPIs, Report Card, tasks)
View team data (aggregate)
Drill down individual Report Cards
Manage members (invite, remove)
Bulk CSV invite
Approve Admin role requests
Configure org settings & KPI definitions
Upload actuals (CSV)
Read audit log

= scoped to own team or data only, enforced at data layer. = full access for role. = denied by RLS policy.

Architecture note

These permissions are enforced by Supabase RLS policies at the database layer — not just checked in application code. A UI bug cannot expose a row a role is not authorized to see. Org isolation is structural: every query filters on org_id = auth.jwt()->'org_id' as a hard policy condition.

Deny-by-default Data-layer enforcement Org-scoped isolation Append-only audit log
How it works

Four steps from invite to auditable access

01 — INVITE
CSV / bulk invite

Admins invite members via the UI or by uploading a CSV with name, email, and initial role. Bulk invites process asynchronously — each invited member receives a scoped invitation email. No member is added to the org without an explicit invite action.

02 — APPROVE
Approval inbox

Admin role requests and certain elevated-access requests land in the Owner's approval inbox. They do not take effect until explicitly approved. Every approval and rejection is written to the audit log with timestamp and approver identity.

03 — SCOPE
Deny-by-default RLS

Once a member is active, their queries are filtered by RLS policies that check role and org_id on every request. Cross-org data is structurally inaccessible. Role downgrades take effect immediately — no cache, no delay, no session to wait for.

04 — AUDIT
Append-only log

Every significant event — invite, approval, role change, data upload, audit log read — is written to the audit log. Rows are append-only: no update, no delete. Owners and Admins can read the full log for their org at any time.

Security posture

Architecture, not configuration

Security properties that require correct configuration by every admin are security properties that will eventually be misconfigured. Compass puts the guarantees in the architecture so they are not dependent on correct usage.

Single-project additive model
Compass uses a single Supabase project per environment. All access control is additive — you grant, you do not restrict. Default deny means the worst outcome of misconfiguration is "too restrictive," not "too permissive."
Edge-only writes
Write operations go through Supabase Edge Functions, not direct client-to-database calls. This means server-side validation runs on every write before it reaches the database — including data format checks, org_id injection, and audit log writes.
Privacy boundaries by policy, not trust
Manager cross-team data access requires an explicit Owner approval, logged to the audit trail. It is not a setting that can be silently enabled. The boundary is a hard database policy — not a UI toggle that could be bypassed.
No surveillance features
Admin & Security gives you control over who can see what — it does not give you the ability to monitor individual behavior, track activity, or enable keystroke logging. These capabilities do not exist in Compass at any role level.
Access you can trust because you can verify it

Invite. Approve. Audit.

Admin & Security is live in Compass. RBAC, deny-by-default RLS, org isolation, the approval inbox, and the append-only audit log are active from the moment your org is set up — no configuration required.

Compass