User Roles & permissions
Purpose and who uses it
Super AdminHotel ManagerOne 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.
- 1Page head“User Roles & Access” with the legend “0 none · 1 view · 2 edit · 3 full. Changes reach signed-in users within about 15 seconds”.
- 2Level legendThe four levels with their colours: 0 No access (grey), 1 View only (blue), 2 Can edit (amber), 3 Full access (green).
- 4Matrix rowsOne row per role. Under the name, how many user accounts currently hold that role (“3 users”).
- 5SaveA 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
0–3, coloured by level. - The Super Admin row shows a lock icon and eight fixed green
3badges, 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.
| Field | Type | Notes |
|---|---|---|
| 0 · No access | – | The module is hidden from the sidebar and every request to it is refused. |
| 1 · View only | View | Open the screen, read lists and drawers, print. No create, edit or export buttons. |
| 2 · Can edit | View · Create · Edit | Everything a desk needs day to day: new records, status moves, inline edits. |
| 3 · Full access | View · Create · Edit · Delete · Approve · Export | Also 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.
| Field | Type | Notes |
|---|---|---|
| Dashboard | Dashboard, Notifications | |
| Bookings | Bookings | |
| Rooms | Rooms, Housekeeping, Maintenance | |
| Guests | Guests | |
| Payments | Payments & invoices, POS terminal, Restaurant, Inventory | |
| Staff | Staff (directory, rota, attendance, leave, accounts) | |
| Reports | Reports & exports | |
| Settings | Settings, 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.
| Role | Dashboard | Bookings | Rooms | Guests | Payments | Staff | Reports | Settings |
|---|---|---|---|---|---|---|---|---|
| Super Admin | Full | Full | Full | Full | Full | Full | Full | Full |
| Hotel Manager | Full | Full | Full | Full | Full | Full | Full | Edit |
| Receptionist | View | Full | Edit | Edit | View | None | None | None |
| Accountant | View | View | None | View | Full | None | Edit | None |
| Housekeeping Mgr | View | View | Full | None | None | Edit | View | None |
| Maintenance | View | None | Edit | None | None | None | None | None |
| Restaurant Mgr | View | View | None | View | Edit | View | View | None |
| HR Manager | View | None | None | None | View | Full | Edit | View |
| Security | View | View | View | View | None | View | None | None |
- 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 AdminPick new levels in a row, click Save; the change is audited and reaches users within seconds.
- 1Open User RolesSidebar → User Roles. If you cannot see the entry, your Settings level is below Full.
- 2Change the cells you needUse the dropdown in each cell (0–3). You can change several cells in one row before saving; each row saves separately.
- 3Click Save on that rowThe button appears only on rows with unsaved changes. The toast reads “<role> permissions saved. Applies to signed-in users within about 15 seconds”.
- 4VerifyAsk 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.
| Role | Settings |
|---|---|
| Super Admin | Full |
| Hotel Manager | Edit |
| Receptionist | None |
| Accountant | None |
| Housekeeping Mgr | None |
| Maintenance | None |
| Restaurant Mgr | None |
| HR Manager | View |
| Security | None |
- 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.
The Super Admin role is fixed at full accessFull access on Settings is reserved for admin-tier roles (Super Admin, Hotel Manager); give <role> "Can edit" at mostYour role (<role>) has "<level>" on Settings; this action needs "Full access".Only a Super Admin can manage <role> accountsRole not foundTerms 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.