Roles and permissions

Staff capabilities and which dashboard page each one opens.

Roles hold boolean capabilities. The first user gets an Admin role with all of them. Staff access changes go through the staff commands, not generic GraphQL. Each page and command re-checks the capability against the database.

CapabilityPages
canAccessDashboardRequired to sign in to the dashboard
canManageOrdersOrders, Fulfillment, Recurring baskets, Customer inbox
canManageProductsProducts, Merchandising
canManageInventoryInventory, Purchasing
canManageSuppliersSuppliers
canManageDeliveryDelivery, Pickup
canManagePaymentsPayments, Reports, settling supplier invoices
canManageUsersCustomers, Staff
canManageOnboardingSettings, Communications, onboarding

A user without a capability is redirected to /dashboard/no-access. The count approval and supplier invoice variance approval each need a second operator.

Shoppers have no role. They read their own orders, addresses, lists, favorites, and recurring baskets through owner filters.