Permissions
Every community and department permission, what it allows, and the rules for department heads and department roles.
Roles carry community permissions, and members get every permission of every role they hold. The owner and admins have all permissions. You can only grant permissions you hold yourself. Ranks and department roles carry department permissions, which work in one department only.
Community permissions
Permissions are grouped on the role editor (Admin, Roles):
| Group | Permissions |
|---|---|
| Community | community.settings, community.branding, community.roles, community.departments, config.manage, community.penal_code, community.webhooks, community.discord, community.audit, community.data, site.manage |
| Members | members.view, members.manage, members.view_pii |
| CMS | roster.view_internal, roster.manage, roster.promote, applications.view, applications.review, applications.forms, announcements.manage, docs.manage |
| Civilian, DMV | civilian.access, civilian.manage_any, business.create, business.manage_any, dmv.access, dmv.licenses, dmv.registrations |
| LEO | leo.access |
| Dispatch | dispatch.access, calls.self_dispatch, calls.manage_any, units.manage_any |
| Fire/EMS | fire.access, ems.access |
The editor lists a few more permissions for features that are still on their way.
Starter roles
| Role | Typical use |
|---|---|
| Member | Everyone. Grants nothing by default. |
| Civilian | civilian.access and business.create. |
| Officer, Firefighter, EMT, Dispatcher | MDT access for their departments. |
| DMV Clerk | The DMV queue. |
| Supervisor, Staff, Recruitment, Training | Staff duties. |
Settings and members
| Action | Needs |
|---|---|
| Admin, General | community.settings |
| Admin, Rosters (community roster builder) | community.settings |
| Finalize automatically when both departments approve switch | community.settings |
| Admin, Roles | community.roles |
| Admin, Members, and seeing Discord IDs on profiles, the roster and its CSV | members.view |
| Edit Nickname and Clear Profile on a member | members.manage |
| Reveal a member's email and IP history | members.view_pii |
The owner can't be kicked, banned or suspended, and only the owner can act on an admin.
Departments
CMS, Departments needs community.departments. Writing subdivisions and certifications community-wide takes community.departments, not roster.manage. A certification's valid days needs dept.certify or community.departments.
Department permissions
A rank or department role can carry these. They work only inside that department.
| Permission | A holder can |
|---|---|
dept.page | Edit the public page settings (the Public page shows switches, the banner, subdivision descriptions) and rank colours; post, pin and delete notices; set quick links on the members-only page. |
dept.docs | Write, edit and delete the department's documents, and its subdivisions' documents. They can't widen one to the whole community. |
dept.roster | Add members, edit seats (callsign, status, subdivisions, certifications), remove seats, and add subdivisions and certifications, in their own department only. |
dept.promote | Promote and demote members. |
dept.applications | See and decide the department's applications, and open or close its forms. |
dept.loa | Approve the department's leave requests. Leave arrives with the leave module. |
dept.discipline | Handle the department's discipline. It arrives with the discipline module. |
dept.certify | Award and remove certifications on the department's seats. |
Department head in the rank editor means all eight. Department roles also use dept.recruitment, dept.training, dept.transfers and dept.notices (see Department roles).
Each permission is the department-wide version of a community-wide one: community.departments, docs.manage, roster.manage, roster.promote, applications.review, loa.review and discipline.manage. A member who holds the community-wide permission keeps it everywhere, with none of the head rules below.
A permission applies through a current seat (not suspended) on an active membership, and it takes effect at once. Structure stays with community.departments: a head can't create, rename, reorder or delete ranks, change a department's name or type, or touch join codes.
The head rules
- Below your own rank. A head can only seat, promote, demote, edit or remove members whose rank sits strictly below their own. They can't touch their own seat.
- Not another head. A rank that carries
dept.promoteis a head rank. A head can't promote someone into it, hold it over someone, or change a member who has it. In the starter BCSO ranks the Sheriff and the Undersheriff are both head ranks, so the Sheriff can't promote a Deputy to Undersheriff, and can't edit or remove the Undersheriff. - Entry rank only without Promote. With
dept.rosterbut notdept.promote, a head adds new members at the department's entry rank only. - Peer rule. A head never edits, suspends or removes the seat of the community owner or an admin.
- Their department only. The department is read from the row being changed, so a head can't act on another department, or on rows from another community.
- Rank permissions. A head can change the department permissions of ranks below their own, and only give permissions they hold themselves. They never give
dept.rosterordept.promote, since that would make another head, and can't change a head rank or their own. The owner and members withcommunity.departmentscan change any rank, and a non-owner can only give or remove permissions whose community-wide equivalent they hold themselves. - Applications. A head's scope is the department's forms, plus any form whose apply rule names only that department. Accepting an application seats the applicant below the head's rank, and never at a head rank or into a role the head can't grant.
Starter heads
New communities seed these: the top two ranks of each department except Civilian (which has no heads) are head ranks with all five permissions, and other Command ranks get dept.applications.
Department roles
| Role | What it carries |
|---|---|
| Head | Everything below, plus giving the other roles, mapping Discord roles and changing rank permissions. |
| Deputy head | Page and notices, documents, roster, promotions, applications, leave, discipline, certifications, recruitment, training, transfers and rank permissions. It can't give roles. |
| Recruitment | Review the department's seat applications and sign off the department's side of transfers (dept.recruitment, dept.transfers). |
| Training | Review the department's subdivision and certification applications, and award and remove certifications (dept.training, dept.certify). |
| LOA approval | Approve leave requests (dept.loa). |
| Discipline | Handle discipline (dept.discipline). |
| Notices and docs | Post notices and quick links, and write department documents (dept.notices, dept.docs). |
The roster and promotion permissions (dept.roster, dept.promote) stay with Head and Deputy head.
Starter department roles
In every department except Civilian: Head is the top rank, Deputy head the second, Recruitment, Training, Discipline and Notices and docs the other command ranks, and LOA approval the supervisor rank up to just below the top two. Civilian starts with none.
Who can give what
| Who | May give |
|---|---|
The owner, admins, and members with community.departments | Any role, but only roles whose permissions they hold community-wide. They give Head and Deputy head. |
| The department's Head | Recruitment, Training, LOA approval, Discipline and Notices and docs, only to ranks and members below their own rank, and only roles whose permissions they hold. |
| Anyone else, Deputy head included | Nothing. |
Nobody can give a role to their own seat or a rank they sit at. A head can't give a role to another head, a head rank, or a seat that holds dept.promote. The rules stop a head widening their own access.
A role given to a member needs a current seat in the department, not a suspended one. Removing the seat, or the member leaving the department or the community, removes the role and writes an audit row.
Roster
| Action | Needs |
|---|---|
| See the roster | members.view |
| Add, edit and remove members | roster.manage (or dept.roster in the department) |
| Change ranks | roster.promote (or dept.promote in the department) |
| See badge numbers and duty hours | roster.view_internal |
Add Member only offers a rank whose role you could grant. On the community roster, Edit shows on every seat for roster.manage, and for a dept.roster holder only on that department's seats, never their own. The editor re-checks its own rules when you save, and Edit needs the CMS module on.
Applications
| Action | Needs |
|---|---|
| Manage forms in Admin, Applications | applications.forms |
| See applications in CMS, Applications | applications.view |
| Decide applications | applications.review |
| Change a form's Discord section | community.discord |
| Retry Writeback | applications.review |
With Who reviews empty, a form is open to everyone with applications.view (to see it) and applications.review (to decide it). With roles picked, only members who also hold one of them see and decide it. The owner, admins and anyone with applications.forms always see every form.
Transfers
| Step | Who | Needs |
|---|---|---|
| Release | The leaving department | dept.transfers in that department (Head, Deputy head or Recruitment) |
| Accept | The joining department | dept.transfers in that department |
| Finalize | Administration | roster.manage |
| Deny | Either department, or Administration | The same as the side it denies for |
dept.transfers is held through a department role, not a rank: the Head, Deputy head and Recruitment roles carry it. Administration's community-wide rights never sign for a department, so both departments must always sign.
Training
| What | Needs |
|---|---|
| Add, edit and delete courses; sign off trainees | dept.certify in the department, or roster.manage community-wide |
| Add, edit, delete and give awards; remove a given award | dept.roster in the department, or roster.manage community-wide |
| Community-wide awards | roster.manage only |
Audit and data
Admin, Audit needs community.audit. Audit log exports include IP addresses only for members with members.view_pii.