Skip to main content

Itinera — Roles & Permissions

Last updated: February 24, 2026


Role Overview

RoleScopeWho they are
SUPERADMINPlatform-wideItinera operator (you) — full access to all companies, all data, billing, platform config
ADMINCompany-wideCarrier owner or ops manager — full control within their company, cannot delete routes
DISPATCHERCompany-wideDay-to-day ops — creates and manages routes, assigns drivers, uploads fuel prices
READONLYCompany-wideAccountant, auditor, carrier contact — sees everything within their company, changes nothing
OWNER_OPERATOROwn truck onlyIndependent contractor — sees their own routes, fuel costs (marked-up price), and earnings
DRIVEROwn assignments onlyEmployee driver — sees their assigned routes, navigation links, personal fuel/analytics

Permissions Matrix

ActionSuperAdminAdminDispatcherReadOnlyOwnerOperatorDriver
Routes
View all routesOwn onlyOwn only
Create / edit routes
Cancel routes
Delete routes
Edit COMPLETED/CANCELLED routes
Fleet & Tracking
View live fleet mapOwn truck
View deviation alertsOwn truck
Fuel
View fuel stops (real price)
View fuel stops (marked-up price)
Upload fuel prices
Analytics
Fleet-wide fuel analytics
Own truck analytics✅ (marked-up)✅ (real price)
Financial reports / marginsOwn earnings only
Reports
Route summary / detailOwn onlyOwn only
Activity log
Deviation reportOwn only
Fuel stops reportOwn only
Fuel spend / financial reportOwn only
Users & Settings
Manage users (invite, deactivate)✅ (see constraints)
Manage company settings
Manage all companies
Notifications
Receive all company alertsOwn truck only
Delete notifications

Role Assignment Constraints

  • SuperAdmin can assign any role to any user across any company
  • Admin can assign DISPATCHER, READONLY, OWNER_OPERATOR, DRIVER within their own company only — cannot create or promote other Admins (prevents privilege escalation)
  • No other role can manage users

Driver Portal Scope

Drivers get a simplified mobile-first view, not the full dispatcher dashboard.

PageAccess
ProfilePersonal info, password, 2FA
My RoutesAssigned routes (active + past), navigation links, fuel stop recommendations
My AnalyticsPersonal MPG, fuel history, route history (real prices, not marked up)
NotificationsAlerts about their own truck only

Fuel Price Markup (Owner Operators)

Owner operators see a marked-up price rather than the real network price. Configurable per company and per individual — not hardcoded.

fuel_pricing_rules table (added with OWNER_OPERATOR implementation in Phase 8)

FieldTypeNotes
iduuid PK
company_iduuid FKWhich company this rule applies to
applies_to_roleenumOWNER_OPERATOR or DRIVER
user_iduuid FK nullableIf set, overrides role-level rule for a specific person
markup_typeenumFIXED (e.g. +$0.12) or PERCENTAGE (e.g. +5%)
markup_valuedecimalThe markup amount
effective_fromdateWhen this rule takes effect
created_atdatetime

Lookup order: user-level rule → company role-level rule → real price (no rule exists)

Important: Real price always stored internally. Markup applied at display/API response time only — never persisted.

fuel_price_views table (audit trail)

Every time a marked-up price is shown, the real price and applied markup are logged here for margin tracking and dispute resolution.


Schema Fields Required (Future)

Fields to add to users when implementing full role system:

FieldPurposePhase
samsara_driver_idLinks Driver/OwnerOperator to Samsara record for data scopingPhase 9
samsara_vehicle_idLinks OwnerOperator to their specific truckPhase 8
company_idFK to companies tablePhase 8

The JWT/session token must carry companyId once multitenancy is live so every API call can scope queries without an extra DB lookup.


Implementation Order

PhaseWhat gets addedPrerequisite
Roadmap Phase 1SUPERADMIN and READONLYPermission adjustments on existing requireAuth() — no schema changes
Roadmap Phase 8company_id scoping + OWNER_OPERATOR + fuel_pricing_rulesRequires companies table (Better Auth migration)
Roadmap Phase 9DRIVER with simplified portalRequires Samsara driver ID linking + multitenancy