Skip to content

Authorization Model

Effective permission = role permissions ∩ token scopes

An operator with an ads:read-only token can only read.

Roles

RolePermissions
viewerRead variables, browse symbols, device info, read files
operator+ Write variables, upload files
admin+ Start/stop/reset PLC

Scopes

ScopeGrants
ads:readAll read operations
ads:writeWrite operations (variables, files)
ads:lifecyclePLC lifecycle control

Policies

PolicyRequirements
ReadAccessplc_access check + role >= viewer + scope ads:read
WriteAccessplc_access check + role >= operator + scope ads:write
LifecycleAccessplc_access check + role = admin + scope ads:lifecycle

Per-PLC Access Control

Add a plc_access claim to the JWT with an array of allowed PLC aliases:

{
  "plc_access": ["Line1", "TestRig"]
}
  • If plc_access is present, the user can only access listed PLCs
  • If plc_access is absent, access to all PLCs is granted (default allow)
  • Accessing a denied PLC returns 403 with PLC_ACCESS_DENIED