ThorStackThorStack
Administration

Role-based access control

Roles, permissions, default policies, and how to scope access cleanly across modules.

What RBAC is in ThorStack

RBAC is the access model for everything in Mission Control — modules, records, settings, integrations, agents. Every action a user takes is checked against their effective role at the moment of the action. There is no "admin override" that bypasses the model.

Built-in roles

RoleWhat it can do
OwnerEverything, including billing, RBAC changes, and tenant deletion. Limited to a small number of users by design.
AdminEverything except billing changes and Owner promotion.
ManagerRead/write within their assigned modules; can approve gates within scope.
MemberRead/write on records they own or are assigned.
ViewerRead-only across the modules they're entitled to.

You can clone a built-in role to make a custom role with finer-grained scopes.

How permissions work

Every resource (module, record, setting) has a permission key like crm.deal.read or finance.invoice.send. A role is a set of permission keys. The check at action time is:

  1. Resolve effective permissions — built-in role + group memberships + record-level grants.
  2. Match the action against the resource's required keys.
  3. Allow or deny — and log the check to the audit trail (see Audit logs).

This is checked server-side on every API call. Client-side hiding is a UX nicety, never the security boundary.

Record-level scopes

Some modules support record-level grants on top of role-level permissions. Examples:

  • A deal can be shared with a specific user or group beyond the deal owner's team.
  • A note can be private, team-visible, or company-wide.
  • An invoice can be visible to a contractor without granting them broader Finance access.

Record-level grants always expand, never shrink, what role permissions allow.

Default policy: least privilege

New users default to Member with no module assignments. An Admin must assign modules explicitly. This catches the failure mode where a junior hire accidentally inherits Finance write access from a generic "Staff" group.

Departments

Departments are groups with semantics. Adding a user to the Finance department grants the standard Finance permissions; removing them revokes them. Use departments instead of cloning custom roles per person.

Changes are gated

RBAC changes are themselves a gated action — see Approval gates. Adding someone to Owner triggers a second-Owner approval by default.

Next

Ready for a stack
built around you?

Every ThorStack deployment starts with a 30-minute call. Tell us how you operate — we'll show you what your stack would look like.