Skip to content

Roles & Permissions ​

Shelf checks every authorization decision β€” on the web app and in the companion app β€” the same way: roleHasPermission({ roles, entity, action }). This page is generated by actually CALLING that function for every role, resource and action, rather than reading the raw role β†’ permission table by eye β€” because the raw table, on its own, is misleading.

Why: roleHasPermission checks one thing FIRST, before it looks at the table at all β€” a team member with the Owner or Administrator role can do absolutely everything, on every resource, full stop. Only Self-service member and Base member are actually constrained by the table below. So a matrix built from the raw table would correctly describe those two roles and silently UNDER-report Owner and Administrator β€” this page can't make that mistake, because every cell it prints came from the same function the app itself calls.

Why we generate this by asking the code ​

Take Assets (asset). An Administrator is allowed to checkout one β€” but that permission does not appear in Administrator's raw entry in the permission table at all. Only the short-circuit grants it.

Reading the source table by eye would tell you an Administrator cannot do this. They can. That single case is why every cell below was produced by calling the real function rather than by transcribing the table.

Effective permissions by resource ​

Owner and Administrator are not in the table below because their row would just be "everything", for every resource β€” that's the short-circuit. What follows is the real constraint: what a Self-service member (a trusted crew member with wider access than a casual account) and a Base member (the default, most-restricted role) can each do, resource by resource.

ResourceSelf-service memberBase member
Assetsview, take/release custody ofview
Asset list column/filter settingsviewview
QR codesviewview
Bookingscreate, view, edit, delete, check out, check in, export, archive, cancel, extend, manage assets on, manage kits oncreate, view, edit, delete, export, manage assets on, manage kits on
Booking notescreate, viewcreate, view
Tagsβ€”β€”
Categoriesβ€”β€”
Locationsβ€”β€”
Location notesβ€”β€”
Custom fieldsβ€”β€”
Workspace (organization) settingsβ€”β€”
Team membersβ€”β€”
Team member profilesβ€”β€”
Dashboardβ€”β€”
General settingsβ€”β€”
Working hoursviewview
Subscription / billingβ€”β€”
Kitsview, take/release custody ofview
Notesβ€”β€”
Scanningβ€”β€”
Custodyβ€”β€”
Asset remindersβ€”β€”
Audits (stocktakes)view, editview, edit
Audit notescreate, viewcreate, view
Team member notesβ€”β€”
Asset modelsβ€”view
Clientsβ€”β€”
Call sheetsviewview
Booking crewviewview
Vehiclesβ€”β€”
Vendorsβ€”β€”
Transport line itemsβ€”β€”
Email settingsβ€”β€”
Your own account dataview, editview, edit
In-app update noticesviewview
Command palette (⌘K) searchviewview
Rate cardsβ€”β€”
Quotesβ€”β€”
Client proposalsβ€”β€”
Purchase ordersβ€”β€”
Label printers / print relaysβ€”β€”
Print jobs (label print requests)create, viewcreate, view
Client requests (inbound leads)β€”β€”

Everything on this site is written by Artefact Group for our own installation. Shelf is a fork of the AGPL-3.0 licensed Shelf.nu project β€” for upstream’s own documentation, see docs.shelf.nu.