DataHub

Role-Based Access Control

Resource and action permissions — how DataHub authorizes console and API access.

DataHub uses resource + action RBAC. Permissions are checked per resource (e.g. plants, rules, dashboards) and action (e.g. create, read, update, delete).

Authorization is not based on role name strings like "ADMIN" in application code — roles are configurable permission maps.

Resources

Valid resources include: plants, machines, devices, tags, rules, alarms, dashboards, programs, channels, users, templates, maintenance, inventory, wms, telemetry, settings, roles, audit, ops, assets, screens, catalog, platform.

Actions

Valid actions: create, read, update, delete, acknowledge, share, start, stop, adjust, export.

Permission strings combine action letters, e.g.:

  • crud — full create/read/update/delete
  • r.ack — read + acknowledge
  • crud.share — full access plus share links
  • crud.start.stop — full access plus start/stop programs

Deny wins over allow

Roles can define denied actions that override grants. Example: *.delete denies delete on all resources; users.* denies all user management.

System roles

Four seeded system roles provide default permission maps:

RoleTypical use
ADMINFull platform access including users, roles, audit
OPERATORDay-to-day operations; no delete on most resources; no user/role management
VIEWERRead-only across operational data
ENGINEERDevice/rule/program configuration with broader write access

Custom roles can be created in Users → Roles with a permission matrix.

Plant scope

Users can be assigned to a specific plant. List queries and mutations are scoped to that plant — operators at Site A cannot see Site B data.

UNS path filter

Optional UNS path filter limits which tag paths a user can browse in UNS Explorer, enabling area-level access within a plant.

Frontend and backend

  • Backend: Every mutation and sensitive read checks @RequirePermission(resource, action) and plant scope
  • Frontend: Buttons and forms are gated with can(resource, action) for UX — backend always re-validates

See Permissions reference for the full matrix.