User guide · Modules

User Roles & permissions

The permission matrix: which of the nine roles may view, edit or fully manage each of the eight modules, and how an administrator changes it.
Whole guide

Purpose and who uses it

Super AdminHotel Manager

One table decides what every sidebar entry and every button does for a given role.

Access in the system is role × module × level. There are 9 standard roles (Super Admin, Hotel Manager, Receptionist, Accountant, Housekeeping Mgr, Maintenance, Restaurant Mgr, HR Manager, Security) and 8 permission modules (Dashboard, Bookings, Rooms, Guests, Payments, Staff, Reports, Settings). Each role holds a level from 0 to 3 for each module. The same table drives the sidebar, the buttons on every screen and the API guard behind them, there is no separate list of "who can click what".

User Roles & Access is the screen where an administrator reads and changes that table. It is deliberately narrow: it does not create roles, rename them or assign people to them. People are given a role in Staff → Accounts; this screen only sets what a role may do.

Only a user whose Settings level is Full can open it, by default that is Super Admin alone (Hotel Manager holds Settings at "Can edit").

Screen anatomy

A single wide table: one row per role, one column per module, a level selector in each cell.

User Roles & Access
1245
  1. 1
    Page head
    “User Roles & Access” with the legend “0 none · 1 view · 2 edit · 3 full. Changes reach signed-in users within about 15 seconds”.
  2. 2
    Level legend
    The four levels with their colours: 0 No access (grey), 1 View only (blue), 2 Can edit (amber), 3 Full access (green).
  3. 4
    Matrix rows
    One row per role. Under the name, how many user accounts currently hold that role (“3 users”).
  4. 5
    Save
    A purple Save button appears on a row as soon as you change any of its cells and disappears once saved.
  • Each cell is a small dropdown with the values 03, coloured by level.
  • The Super Admin row shows a lock icon and eight fixed green 3 badges, it has no dropdowns.
  • There are no filters, tabs or search; the whole matrix fits on one screen (scroll sideways on a narrow window).

Levels and what they allow

A level is a number; the actions it unlocks are derived from it the same way everywhere.

The server never stores a list of actions per role. It stores one number per module and derives the actions: View at 1, Create and Edit at 2, Delete, Approve and Export at 3. Every screen and every API route is annotated with the module and the minimum level it needs, so the derivation is the same in the sidebar, on the buttons and in the guard.

Levels → actions
FieldTypeNotes
0 · No accessThe module is hidden from the sidebar and every request to it is refused.
1 · View onlyViewOpen the screen, read lists and drawers, print. No create, edit or export buttons.
2 · Can editView · Create · EditEverything a desk needs day to day: new records, status moves, inline edits.
3 · Full accessView · Create · Edit · Delete · Approve · ExportAlso delete, approve, refund, export and change configuration.

Two practical consequences. A role with View only on a module sees a small lock icon next to it in the sidebar and gets read-only screens. A role with No access does not see the entry at all, and if someone types the address by hand, the page shows a module gate and the API answers 403.

Which screens sit under which module

Sixteen sidebar entries are guarded by eight permission modules; several screens share one.

The permission modules are coarser than the sidebar. When you set a level for Rooms you are also setting it for Housekeeping and Maintenance; a level for Payments covers the POS terminal, Restaurant and Inventory as well.

Permission module → screens it guards
FieldTypeNotes
DashboardDashboard, Notifications
BookingsBookings
RoomsRooms, Housekeeping, Maintenance
GuestsGuests
PaymentsPayments & invoices, POS terminal, Restaurant, Inventory
StaffStaff (directory, rota, attendance, leave, accounts)
ReportsReports & exports
SettingsSettings, User Roles, Audit log

So a Housekeeping Manager with Rooms = Full can also close maintenance tickets, and a Restaurant Manager with Payments = Can edit can record a payment on a guest folio. If that is not what you want, lower the level, there is no finer split.

The default matrix

What every hotel starts with; administrators may change any row except Super Admin.

Default levels per role and module
RoleDashboardBookingsRoomsGuestsPaymentsStaffReportsSettings
Super AdminFullFullFullFullFullFullFullFull
Hotel ManagerFullFullFullFullFullFullFullEdit
ReceptionistViewFullEditEditViewNoneNoneNone
AccountantViewViewNoneViewFullNoneEditNone
Housekeeping MgrViewViewFullNoneNoneEditViewNone
MaintenanceViewNoneEditNoneNoneNoneNoneNone
Restaurant MgrViewViewNoneViewEditViewViewNone
HR ManagerViewNoneNoneNoneViewFullEditView
SecurityViewViewViewViewNoneViewNoneNone
None No accessView View onlyEdit Can editFull Full access
  • Super Admin: Full on everything, and fixed: the server refuses to change it.
  • Hotel Manager: Full on everything except Settings (Can edit), so it runs the hotel but cannot rewrite this matrix.
  • Receptionist: Full on Bookings, Can edit on Rooms and Guests, View only on Payments: can see a folio but not record money.
  • Accountant: Full on Payments (record, refund, settle-later at checkout), Can edit on Reports.
  • Housekeeping Mgr: Full on Rooms (housekeeping and maintenance included), Can edit on Staff for the rota.
  • Maintenance, Restaurant Mgr, HR Manager, Security: narrow by design; Security has View on most operational modules plus the Audit log.

Changing a role's permissions

Super Admin

Pick new levels in a row, click Save; the change is audited and reaches users within seconds.

  1. 1
    Open User Roles
    Sidebar → User Roles. If you cannot see the entry, your Settings level is below Full.
  2. 2
    Change the cells you need
    Use the dropdown in each cell (0–3). You can change several cells in one row before saving; each row saves separately.
  3. 3
    Click Save on that row
    The button appears only on rows with unsaved changes. The toast reads “<role> permissions saved. Applies to signed-in users within about 15 seconds”.
  4. 4
    Verify
    Ask the affected person to reload, the sidebar re-reads the levels from their session. The change is recorded in the Audit log as role.permissions.updated with the before and after levels.

The admin tier: by name or by capability

Super Admin and Hotel Manager are admin-tier by name; any role holding Settings = Full is admin-tier by capability.

"Admin tier" is what the system calls the roles that can manage roles, user accounts and the shared front-desk PIN. It is decided in two ways, and either is enough:

  • By name: Super Admin and Hotel Manager, whatever their matrix says.
  • By capability: any role whose Settings level is Full, whatever it is called.

Being admin-tier has three effects:

  • The shared staff PIN can never sign in as an admin-tier user, those accounts always use email and password, and they are hidden from the PIN name list.
  • Creating an account with an admin-tier role, or changing one, needs Settings = Full. Staff → Accounts refuses otherwise with “Only a Super Admin can manage <role> accounts”.
  • The Audit log is readable (admin tier plus Security).

This is why the matrix editor refuses Settings = Full for non-admin roles: promoting, say, Receptionist to Settings = Full would make it admin-tier by capability while still being reachable through the desk PIN.

Permissions

Reading and writing the matrix both need Settings at Full access.

Settings level per role (default)
RoleSettings
Super AdminFull
Hotel ManagerEdit
ReceptionistNone
AccountantNone
Housekeeping MgrNone
MaintenanceNone
Restaurant MgrNone
HR ManagerView
SecurityNone
None No accessView View onlyEdit Can editFull Full access
  • Open User Roles, read the matrix: Settings · Full access. (View or Can edit is not enough; the sidebar entry is hidden below Full.)
  • Save a row: Settings · Full access.
  • Assign a role to a person: done in Staff → Accounts under the Staff module; admin-tier roles additionally need Settings · Full.

Tips

Small habits that keep the matrix safe and legible.

Errors you may see

Every message the roles API can return, with the reason and the fix.

409The Super Admin role is fixed at full access
Why
You tried to save the Super Admin row. Its levels are hard-wired to 3 on every module.
Fix
Nothing to do; the row is shown locked on screen. Edit a different role.
409Full access on Settings is reserved for admin-tier roles (Super Admin, Hotel Manager); give <role> "Can edit" at most
Why
A non-admin role was given 3 on Settings. That would make it admin-tier by capability and reachable through the front-desk PIN.
Fix
Set Settings to 2 (Can edit) or lower for that role and save again.
403Your role (<role>) has "<level>" on Settings; this action needs "Full access".
Why
The API guard refused the request because your Settings level is below Full. The refusal is written to the Audit log as access.denied.
Fix
Ask a Super Admin to make the change, or to raise your role's Settings level.
403Only a Super Admin can manage <role> accounts
Why
Raised by Staff → Accounts, not this screen: you tried to create or edit a user with an admin-tier role without Settings = Full.
Fix
A Super Admin (or any Settings-Full user) performs that account change.
404Role not found
Why
The role was removed or belongs to another hotel while your page was open.
Fix
Reload User Roles and try again.

Terms used on this screen

Short definitions for the words that matter here.

Permission module
One of the 8 areas a level is set for. Several sidebar screens can share a module.
Level
0 No access · 1 View only · 2 Can edit · 3 Full access. Stored per role per module.
Admin tier
Super Admin, Hotel Manager, or any role with Settings = Full. Excluded from PIN sign-in; may manage accounts and roles.
Module gate
The read-only or blocked state a screen shows when your level is too low for it.