RBAC & Permissions
| Role | Label | Can trade | Can admin | Panel access |
|---|---|---|---|---|
trader | Trader | Yes | No | Style-dependent (see Trading Styles) |
desk-head | Desk Head | No | No | Read-only cross-desk oversight |
risk-manager | Risk Manager | No | No | Read-only all desks + session replay |
admin | Administrator | No | Yes | Everything except order-ticket |
compliance | Compliance | No | No | Read-only + session replay |
sales | Sales | No | No | Sales workbench, market data |
oncall | Oncall Engineer | No | No | Observability + service health panels |
external-client | External Client | No | No | Client RFQ only |
viewer | Viewer | No | No | Market data + analytics read-only |
Panel permissions
Section titled “Panel permissions”Every panel has a PANEL_PERMISSIONS entry defining which roles can access it, and an optional PANEL_TRADING_STYLES entry further restricting trader access by style.
The canAccessPanel(panelId, role, tradingStyle) function is the single source of truth, used by:
- ComponentPicker: filters the "Add Panel" dropdown
- DashboardLayout factory: renders "no permission" message for unauthorised panels in saved layouts
Enforcement points
Section titled “Enforcement points”- Frontend ComponentPicker: panel not shown if role/style does not match
- Frontend DashboardLayout factory: unauthorised panel renders denial message
- Frontend Order Ticket role-check: blocks order submission with per-role/per-style messages
- Backend OMS: rejects orders from non-trader roles
- Backend OMS: rejects orders failing risk-engine checks