Replace one role's permissions
Set permissions for this role only; other roles remain untouched, and permissions never cross between roles or require ordering.
PUT/v1/apps/{appId}/roles/{roleId}/permissions
Include every table the role should access; omitted tables become inaccessible. tables is "*" (everything, future tables included) or a map of table id to grant. Example, read all rows, edit only stage, hide every other field: {"tables":{"tbl_deals":{"access":"granted","fields":{"mode":"selected","entries":{"fld_name":{"see":true},"fld_stage":{"see":true,"edit":true}}},"update":"all"}}}. A field absent from entries is hidden; fields: {"mode":"all","edit":"none"} shows every field, future ones included. rows, update and delete take a filter group as views do, to limit rows. Simulate first if unsure who is affected. Send the revision from roles.get as baseRevision; if someone changed this role after that revision, the save is refused with 409 instead of erasing their change.
Requires the schema:write scope. Operation roles.setPermissions. MCP tool roles_setPermissions. CLI: grid82 roles set-permissions (npx grid82).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
appId | string | yes | |
roleId | string | yes |
Headers
| Name | Type | Required | Description |
|---|---|---|---|
Idempotency-Key | string | no | Any unique string. Sending the same key with the same request again returns the first response (marked Idempotency-Replayed: true) instead of running it twice. Reusing it for a different request is refused with 409. Kept for 24 hours. Up to 255 characters. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
tables | ”*” or object | yes | |
baseRevision | string | no |
Response
Success
dataobjectrequiredRefused
errorobjectrequired