Celiq
v0.12Open app โ†—
Docs/Administration/Permissions

Permissions

How Celiq enforces access โ€” role-based middleware gates layered with row-level Data Keys and column-level Data Gates.

LuminaryWeaverUpdated June 2026 ยท 6 min read
โœฆ
In this section
Part of Celiq's semantic layer platform. Connect your warehouse, model your data once, query it everywhere.
๐Ÿ’ก
Tip
What it is โ€” The model Celiq uses to decide who can do what: an assigned role gates which actions and pages you can reach, while Data Keys and Data Gates gate which rows and columns you can see.
When to use it โ€” When you need to understand why an action is blocked, or when you are planning who should hold which role before inviting people.
Where to find it โ€” There is no separate "Permissions" editor. You set the role per person in Lumen โ†’ Users, and you define row/column rules in Lumen โ†’ Security (and in CML).
Who can use it โ€” Luminary assigns roles and mints workspace credentials; Weaver can manage teams and build the semantic model. Tracer and Lens are subject to permissions but cannot change them.

Permissions in Celiq are not edited one checkbox at a time. Instead, each person holds exactly one role, and that role determines the actions they can take and the pages they can open. Layered on top, Data Keys and Data Gates narrow what data a person sees inside the screens they are allowed to reach.

This page is the conceptual bridge between Roles and the two security pages. Read it first if you are deciding how to lock down a workspace, then move on to Data Keys and Data Gates for the row- and column-level rules.

Overview

Celiq enforces permissions in two layers that always apply together:

  1. Role gates โ€” Every backend route and every protected page checks your role before it runs. The four roles form a strict hierarchy: Luminary > Weaver > Tracer > Lens. A guard names the minimum role, and anyone at or above that level passes.
  2. Data-level security โ€” Once a role check passes, your query is still rewritten before it touches the warehouse. Data Keys add row filters; Data Gates strip columns. Luminary bypasses both; Weaver bypasses column gates but is still subject to row keys.

There is intentionally no granular per-permission editor UI โ€” you cannot, for example, grant one Tracer the ability to mint API keys without making them a Luminary. Permissions are determined entirely by the assigned role plus the CML-defined (or UI-defined) data keys and gates.

When to use it

  • You are setting up a new workspace and want to map people to the right role before sending invites.
  • A teammate reports "this action requires luminary role or higher" or a page redirects them home, and you need to know which role unlocks it.
  • You want regional or team-scoped data restrictions and need to decide between a Data Key (rows) and a Data Gate (columns).
  • You are auditing who can provision credentials (API keys), manage connections, or see billing.

Concepts

TermWhat it means
RoleOne of Luminary, Weaver, Tracer, Lens. Assigned per person; the single biggest determinant of what you can do.
Role hierarchyluminary (4) > weaver (3) > tracer (2) > lens (1). Guards check that your level is at or above the required level.
Role gateA middleware check on a backend route โ€” anyAuth, tracerAndAbove, weaverAndAbove, or luminaryOnly โ€” plus the equivalent route guards in the app shell.
Permission flagA named capability (e.g. create_nodes, manage_users, view_billing) that a role carries. The frontend uses these to show or hide pages; you do not edit them directly.
Data KeyRow-level security (RLS). Restricts which rows of a node a non-Luminary user can see.
Data GateColumn-level security (CLS). Hides specific fields from users below Weaver.

Getting started

You do not "open Permissions" โ€” there is no such screen. Instead you work with the two inputs that produce permissions:

  • Roles are assigned in Lumen โ†’ Users. Changing a person's role is how you change what they can do.
  • Data Keys and Data Gates are defined in Lumen โ†’ Security, or declared in CML alongside your nodes.

Prerequisites:

  • You must be a Luminary to change roles, mint or revoke workspace API keys, manage connections, or view the audit log and billing.
  • You must be a Weaver or above to create teams or build the semantic model (nodes, domains).

Step-by-step

1

Decide the role, not the permission

Open Lumen โ†’ Users and pick the role that matches what the person needs to do. Because there is no per-permission editor, the role is your only lever โ€” choose the smallest role that covers their work (see the action map below).

2

Confirm the action they need maps to that role

Use the table in Examples to confirm. For instance, if they need to import or create nodes, they need at least Weaver (which carries create_nodes); a Tracer cannot reach the Import or Forge pages.

3

Layer on row restrictions with Data Keys

If the person should only see certain rows (e.g. one region), go to Lumen โ†’ Security and assign a Data Key on the relevant node. Without an assignment, a keyed node returns no rows for non-Luminary users โ€” this is the safe default, not an error.

4

Layer on column restrictions with Data Gates

If specific columns must be hidden (e.g. cost, margin, PII), define a Data Gate on those fields. Gates hide columns from everyone below Weaver; Luminary and Weaver still see them.

5

Verify by viewing as that person

Use the View as option (see Sudo) to confirm the combined effect of role plus keys and gates before you tell the person they are set up.

Examples

The table below maps common actions to the real guard that protects them. "Minimum role" is the lowest role that passes the gate.

ActionGuard in codeMinimum role
Read charts, dashboards, signalsanyAuthLens
Run Discover, use Orion, pin to a Mosaicrole permission (run_discover, use_orion)Tracer
View teams and memberstracerAndAboveTracer
Create, rename, or delete a team; assign members to a teamweaverAndAboveWeaver
Import data or open Forge (build the semantic model)create_nodes permissionWeaver
Mint a workspace API keyluminaryOnlyLuminary
Revoke a workspace API keyluminaryOnlyLuminary
Manage connections, manage users, view audit log, view billingrole permissions (manage_connections, manage_users, view_audit, view_billing)Luminary

A role gate is just middleware naming the minimum role. For example, the workspace-teams routes apply two different gates so that anyone can see teams but only builders can change them:

backend/routes/workspaceTeams.js (guards)
GET  /api/workspace-teams           tracerAndAbove   // Tracer, Weaver, Luminary can list

GET /api/workspace-teams/members tracerAndAbove // viewing members is read-only

POST /api/workspace-teams weaverAndAbove // creating a team needs Weaver+

PUT /api/workspace-teams/:id weaverAndAbove // editing a team needs Weaver+

Provisioning credentials is the strictest gate. Minting and revoking workspace API keys is luminaryOnly โ€” a Lens or Tracer who calls it receives a 403:

Response when a non-Luminary mints an API key
{

"error": "Requires role: luminary"

}

Data Keys and Data Gates apply after the role check, at query time. A Data Key on a region column produces a row filter, while a Data Gate hides a column entirely:

orders.yml โ€” declaring data security in CML
node: orders
data_keys:

- column: region # row-level: each user only sees their assigned regions

wildcard: "" # an assignment of [""] grants all rows

data_gates:

- fields: [cost, margin] # column-level: hidden from users below Weaver

With the key above, a Tracer assigned ["US", "CA"] runs a query that is silently rewritten to add orders.region IN ('US', 'CA'). A Tracer with no assignment on a keyed node sees zero rows โ€” the deny-by-default behaviour.

Best practices

  • Assign the smallest role that works. Because permissions follow the role, over-granting a role over-grants everything it carries (including credential minting for Luminary).
  • Reserve Luminary for true admins. Only Luminary can mint or revoke API keys, manage users and connections, and see billing and the audit log.
  • Use Data Keys for "who sees which rows" and Data Gates for "who sees which columns." Do not try to model row restrictions with roles.
  • Declare data security in CML where you can so it lives with the node definition and is reviewed alongside model changes.
  • Verify with View as. The only reliable way to confirm a person's effective access is to view the app as them.

Tips

๐Ÿ’ก
Tip

The role hierarchy means you rarely need to think in terms of individual permissions. If you can answer "what is the lowest role that should be able to do this?", you have your answer. The four levels are Lens (read-only) โ†’ Tracer (analyst) โ†’ Weaver (builder) โ†’ Luminary (admin).

Common mistakes

โš ๏ธ
Warning
Looking for a permissions matrix screen. There isn't one. Celiq does not have a custom or per-permission editor โ€” access is the role plus the data keys/gates, nothing more.

Forgetting that a keyed node denies by default. If a non-Luminary user reports empty results on a node that has a Data Key, the cause is usually a missing key assignment, not a bug. Assign the key (or ["*"] for full access) in Lumen โ†’ Security.

Expecting Weaver to be blocked by column gates. Data Gates only hide columns from users below Weaver. Weaver and Luminary always see gated columns.

Trying to give one Tracer admin-only powers. Minting API keys, managing users, and viewing billing are tied to Luminary. The only way to grant them is to make the person a Luminary.

Troubleshooting

SymptomCauseFix
Requires role: luminary (403)Action is luminaryOnly (e.g. minting/revoking an API key) and you are not a LuminaryHave a Luminary perform it, or have your role raised in Lumen โ†’ Users
This action requires weaver role or higher (403)A weaverAndAbove guard (e.g. creating a team) and your role is Tracer or LensRaise the role to Weaver or above
Import or Forge page redirects you homeThe page requires the create_nodes permission, which only Weaver and Luminary carryUse a Weaver/Luminary account to build the model
Account disabled (401)The account was disabled; the role check re-verifies active status on each requestRe-enable the user in Lumen โ†’ Users
No token provided / Invalid or expired token (401)Missing or expired session, checked before any role gateSign in again
A non-Luminary sees zero rows on one nodeA Data Key exists on that node but the user has no assignment (deny-by-default)Assign the Data Key (or ["*"]) in Lumen โ†’ Security โ€” see Data Keys
A user below Weaver cannot see a column that exists in the modelA Data Gate is hiding that field at query timeConfirm intended; if they should see it, adjust the gate โ€” see Data Gates
  • Roles โ€” the four roles and the full hierarchy that drives every gate
  • Data Keys โ€” row-level security and how key assignments work
  • Data Gates โ€” column-level security and which roles bypass it
  • Users โ€” where you assign and change a person's role
  • API keys โ€” the Luminary-only workspace credential flow
  • Sudo โ€” "View as" to verify a person's effective access