Skip to content

Roles and permissions

How access control works — and why data scope is the part that matters most.

2 min readUpdated 30 July 2026
Architecture
One platform, four layers
Channels
Meta Lead Ads
Google Ads
WhatsApp
Web forms
IVR / calls
REST API
Application
Leads
Deals
Conversations
Campaigns
Automation
Reporting
Intelligence
Lead scorer
Conversion probability
Insight engine
Forecaster
Assistant
Platform
Tenant isolation
Roles & permissions
Audit trail
Billing & app store
A decoupled frontend, a PHP domain core, a separate database per tenant, and the AI layer as a service the rest of the system can run without.

Administration → Roles & Permissions.

A role carries two independent things. Getting the second one right matters more than the first.

Permissions — what someone can do

A flat list of exact capabilities: leads.view, leads.write, calls.dial, reports.export, users.manage, and so on.

Permissions are exact match. There are no wildcards. A role holding leads.view does not automatically receive leads.delete when we add it in a future release.

This is deliberate and it differs from most systems. A wildcard permission means every new capability we ship is silently granted to everyone who already had something related — which is how people end up with rights nobody decided to give them.

Data scope — what someone can see

Separately, each role has one data scope:

ScopeSees
OwnOnly records they own
TeamTheir team's records
LocationTheir location's records, including sub-locations
OrgEverything
Important
Scope is applied in the database query, not in the interface. A telecaller scoped to own cannot reach a colleague's lead by editing a URL, because the row is not in the result set at all.

This is the difference between hiding something and it being inaccessible, and it is the thing to verify if you are completing a security review.

The default roles

RolePermissionsScope
Super adminEverythingOrg
ManagerMost, minus billing and rolesTeam
Team leadLead and activity managementTeam
TelecallerWork their own leadsOwn
ViewerRead-only reportsTeam

These cover most organisations. Change them rather than starting from scratch.

Sensitive permissions

Some permissions are marked sensitive and are worth granting narrowly:

  • reports.export — taking data out of the product
  • calls.recordings — listening to recorded conversations
  • users.impersonate — acting as another member
  • audit.view — reading the audit trail
  • settings.manage — changing workspace configuration

reports.export in particular is separate from reports.view on purpose. Being able to read a report on screen and being able to walk out with the underlying rows are different rights.

API tokens

Settings → API tokens. A token is bound to one membership and can hold a *subset* of that membership's permissions.

A token narrows; it never widens. A token issued by a super admin with only leads.view really can only read leads — the super admin's blanket access does not leak through it.

Auditing access

Every permission change, role change and login is recorded with the actor, their IP and device. Reports → Audit Trail, if you hold audit.view.

The trail includes field-level diffs, so "who changed this lead's owner last Tuesday" has an actual answer.

Something unclear or missing? Tell us and we will fix the page — send us a note.

Roles and permissions — Documentation — atomcrm.ai