Skip to content

Roles and permissions

Admin, Roles (/admin/roles), gated by the role.manage permission.

A role is a named set of permissions. Users hold one or more roles, and their effective permissions are the union.

A role holding * is a superuser within its tenant. Not across tenants: there is no permission anywhere that crosses a tenant boundary.

Create the roles, then create the users. Doing it the other way means editing every account when you realise the role was wrong.

A shape that works for most schools:

RoleHoldsFor
Administrator*You, and one other person
TechnicianView and update everything operational; issue and return loans; create, update and close repairs and tickets; view costsYour day-to-day staff
Senior technicianTechnician, plus device.manage, directory.manage, charge.approve, report.manageWhoever is trusted with MDM commands and money
Front deskloan.view, loan.issue, loan.return, repair.view, repair.create, client.view, stock.manageA counter that hands things out but does not fix them
Read onlyThe .view permissionsA head of department who wants visibility

The front desk role is the one worth building even in a small school. It is what lets you put a student helper or a casual on the counter during the first week of term without giving them the directory or the audit log.

PermissionAllows
loan.viewSee loans and who has what
loan.issueIssue a loan device to somebody
loan.returnMark a loan returned
loan.manageRegister devices, edit, bulk actions, manage loan groups
PermissionAllows
device.viewSee device records and their history
device.manageSend MDM commands: lock, wipe, restart, clear passcode
induction.manageRun inductions, import rosters, record issued devices
PermissionAllows
repair.viewSee submissions
repair.createLodge one
repair.updateChange status, priority, assignment, notes
repair.closeClose one, and record its outcome and cost
PermissionAllows
ticket.viewSee tickets
ticket.createRaise one
ticket.updateChange status, queue, assignment
ticket.commentReply to the requester
ticket.internalRead and write internal notes
ticket.closeClose one

ticket.internal is split out on purpose. An internal note is where somebody writes “third time this term, escalate” or “her mother rang, do not put this in writing”. Separating it means a school can hand a casual the queue without handing them that.

PermissionAllows
stock.manageMaintain the product catalogue and sell items
cost.viewSee cost analytics
cost.exportExport cost data
charge.viewSee damage charges
charge.raisePropose a charge against a family
charge.approveApprove, decline or waive a charge

Damage billing is split across two people on purpose. A technician who can propose a charge must not be able to make it real, and the person who decides a family pays is the same person who can decide they do not, so waiving sits with approval rather than with raising. See damage charges.

PermissionAllows
client.viewSee people and their profiles
client.manageEdit person records, register cards
directory.viewSearch the identity provider
directory.manageChange licences, lock accounts, delegate inboxes, reset passwords
PermissionAllows
user.manageCreate and deactivate staff accounts
role.manageCreate roles and change what they hold
connector.manageConfigure connectors and their credentials
branding.manageChange name, logo and colours
feature.manageEnable and disable modules
workflow.manageStatuses, priorities, types, coverages, parts
billing.manageEnter or remove a licence key
integration.manageIssue API keys and manage webhooks
audit.viewRead the audit log
PermissionAllows
monitor.viewSee service monitors
monitor.manageCreate and configure monitors
backup.viewSee backup history
backup.manageSchedule, run and verify backups
kb.manageWrite and publish knowledge base articles
report.viewRun reports
report.manageCreate and schedule reports

The same checks run on every surface:

  • The web console.
  • The public REST API, scoped to the API key.
  • The MCP server, where a key without a permission does not even see the corresponding tool in tools/list.
  • The assistant, which can only do what the signed-in user’s role allows.

There is no ambient administrator and no back door for an integration. An API key is a set of scopes, and it cannot exceed them.

device.manage allows wipes. That command destroys a student’s data and cannot be undone. Give it to the people who should have it and no one else.

directory.manage allows password resets and mailbox delegation in your identity provider. It is effectively an account takeover capability, which is why Plugboard lets every directory action be attached to a ticket so there is a record of why it happened.

Every permission-gated action is written to the audit log with who did it, when, and what changed. Reviewing that log once a term tells you which permissions are actually being used, which is usually different from what people asked for.