RBAC & Authorization
Permission Model
Permissions are action:resource pairs with wildcard support:
"*":"*" — All actions on all resources
"node:*":"*" — All node actions on any resource
"node:get":"node-123" — Specific action on specific resource
Defined Actions
Each action family has a <family>:* wildcard alongside its individual actions.
Group actions:
group:*, group:create, group:createsubgroup, group:get, group:listsubentities,
group:editnodes, group:update, group:updatesubgroup, group:updatecapabilities,
group:delete, group:deletesubgroup, group:share, group:listusers,
group:listprimaryusers, group:getautomation, group:editautomation,
group:deleteautomation
Node actions:
node:*, node:get, node:update, node:deleteconfig, node:putconfig,
node:editgroups, node:writeshadow, node:readshadow, node:publishtodevice
Node admin actions:
nodeadmin:*, nodeadmin:add, nodeadmin:registerstatus, nodeadmin:reserveid,
nodeadmin:getreservation, nodeadmin:countreservations
Admin config actions — gate the rmng_admin_config table, granted only to
SystemActor and admin callers:
adminconfig:*, adminconfig:get, adminconfig:set
Access Type -> Permissions
GetGroupPermissions maps a user’s group access type to the actions granted on
that group:
Access Type |
Granted Actions |
|---|---|
|
|
|
|
|
|
A secondary user is a primary user without group:editnodes, group:delete,
group:share, group:updatecapabilities and group:listusers — it can manage
subgroups and automations but cannot add or remove nodes in the group or any of
its subgroups, delete the group, share it onward, convert it into a Matter
fabric, or list members other than the primary users.
group:editnodes is held by primary access alone, so node management is what
separates primary access from both other types: neither a secondary user nor a
sub-entity user, even within its own subgroup, can add or remove nodes.
Admin Check
Every admin endpoint establishes that the caller came through the admin Cognito
pool before doing anything else, and answers 403 if it did not. The check is on
the caller resolved from the request, not on a value in the request body.
Admin-pool membership is the whole privilege — there is no tier above it, so no
admin endpoint distinguishes one admin from another.