Contents

Roles, teams and permissions - Plugixa CRM

Access is three separate questions, answered on three screens. Keeping them apart is what makes the model comprehensible.

Question Screen
May this person open the CRM at all? CRM access
What may they do once inside? Roles
Who counts as “their team”? Teams

All three are free. Some of this plugin’s older code comments call Teams premium; they are out of date.

1. CRM access

The CRM access screen, listing people and whether they can open the CRM

Anyone listed here can open the CRM. Access arrives two ways:

  • Via a WordPress role that already holds the capability - administrators do.
  • Granted individually, with Give access, for somebody whose WordPress role does not.

Portal customers are not listed here. They are a different kind of account entirely, and they never see the CRM. See Customer Portal.

Opening the CRM is not the same as seeing anything in it. That is the next screen’s job.

2. Roles

The Roles screen, with the banner explaining what happens when there are none

What happens before you make one

This is the most important sentence on the page, and the screen leads with it:

With no roles, users see their own records and their team’s, and can edit only their own. A role replaces that for whoever holds it.

So a fresh install is already sensible. You do not have to build a permission model before anybody can work, and installing or upgrading never takes access away. Creating your first role is the moment the rules change, and only for the people holding it.

What a role says

For each entity - accounts, contacts, leads, opportunities, cases and the rest - and each action, a role picks one scope:

Scope Means
All Every record of that kind
Team Records belonging to their team
Own Records they created or are assigned
None None

The actions are read, create, edit, delete and stream.

Stream being separate is worth noticing: somebody can be allowed to read a deal without being allowed to follow its activity feed.

Field-level rules

On top of that, individual fields can be hidden or made read-only. Somebody can work a record without seeing the figure on it.

This is enforced everywhere the field could otherwise leak, not just on the form: the REST responses, the exports, and even email template placeholders, where {Contact.salary} renders empty rather than handing over a value the person could not read on screen.

Holding more than one role

The most permissive answer wins. Adding a role can only ever give somebody more access, never less.

That is the behaviour people expect, and it avoids the support ticket that starts “we added a role and everyone lost access”.

3. Teams

The teams screen, listing each team and its members

A team is a group of users. That is all it is, deliberately: membership here, entitlement in the role.

Teams are what make the team scope mean something. Without teams, “team” and “own” would be the same thing.

Keeping them apart means you can reorganise who is on which team without rewriting any permissions, and change what a role allows without touching anybody’s team.

Where the rules are enforced

Every permission decision in the CRM runs through one place, and that place is handed the record, not just the action. That is what makes “own” and “team” answerable at all.

Two consequences worth knowing:

  • The front end inherits it. The [plugixa_crm_app] shortcode talks to the same API, so there is no second policy to keep in step.
  • A list you may not read is empty, not partial. And the filter list is read after the permission check, so somebody who may not read an entity cannot learn which fields it has by asking what it can be filtered by.

Troubleshooting

Symptom Usual cause
Somebody cannot open the CRM They are not on CRM access, and their WordPress role does not grant it.
They can open it but see nothing Their role scopes everything to none, or to own and they own nothing.
Everyone sees everything No roles exist yet. That is the default, and it is deliberate.
Adding a role gave somebody more access Correct. Most permissive wins.
A field is blank for one person Field-level rules. Check their role.
A placeholder renders empty in an email Same reason. Placeholders obey field rules.
“Team” behaves like “own” Nobody is on a team. Teams give the scope its meaning.
A portal customer is not on CRM access Correct. They are a different kind of account.

What to do next

  • The customers who are not staff: Customer Portal.
  • What field rules affect: Email Templates.
  • What they do not reach: Custom Fields. Field-level rules are declared against an entity’s own columns, so a custom field cannot be hidden from one role while the record stays visible.
  • The same rules off wp-admin: Shortcodes and Blocks.

Quick Links