5.2. 支持的 RBAC REST API 端点
RBAC REST API 提供了在 Developer Hub 中管理角色、权限和条件策略的端点,并检索有关角色和策略的信息。
5.2.1. 角色
RBAC REST API 支持以下端点来管理 Red Hat Developer Hub 中的角色。
- [GET] /api/permission/roles
返回 Developer Hub 中的所有角色。
响应示例(JSON)
[ { "memberReferences": ["user:default/username"], "name": "role:default/guests" }, { "memberReferences": [ "group:default/groupname", "user:default/username" ], "name": "role:default/rbac_admin" } ]
- [GET] /api/permission/roles/{kind}/{namespace}/{name}
返回 Developer Hub 中单个角色的信息。
响应示例(JSON)
[ { "memberReferences": [ "group:default/groupname", "user:default/username" ], "name": "role:default/rbac_admin" } ]
- [POST] /api/permission/roles/{kind}/{namespace}/{name}
在 Developer Hub 中创建角色。
表 5.1. 请求参数 名称 描述 类型 存在 正文(body)
memberReferences
、组
、namespace
并将新角色命名为要创建的新角色。请求正文
必填
请求正文示例(JSON)
{ "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }
响应示例
201 Created
- [PUT] /api/permission/roles/{kind}/{namespace}/{name}
为 Developer Hub 中的角色更新
memberReferences
、类型、namespace
或name
。请求参数
请求正文包含
oldRole
和newRole
对象:Name 描述 类型 存在 正文(body)
memberReferences
、组
、namespace
并将新角色命名为要创建的新角色。请求正文
必填
请求正文示例(JSON)
{ "oldRole": { "memberReferences": ["group:default/test"], "name": "role:default/test_admin" }, "newRole": { "memberReferences": ["group:default/test", "user:default/test2"], "name": "role:default/test_admin" } }
响应示例
200 OK
- [DELETE] /api/permission/roles/{kind}/{namespace}/{name}?memberReferences=<VALUE>
从 Developer Hub 中的角色中删除指定的用户或组。
表 5.2. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
实体的名称
字符串
必填
memberReferences
关联的组信息
字符串
必填
响应示例
204
- [DELETE] /api/permission/roles/{kind}/{namespace}/{name}
从 Developer Hub 删除指定的角色。
表 5.3. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
实体的名称
字符串
必填
响应示例
204
5.2.2. 权限策略
RBAC REST API 支持以下端点来管理 Red Hat Developer Hub 中的权限策略。
- [GET] /api/permission/policies
返回所有用户的权限策略列表。
响应示例(JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow", "metadata": { "source": "csv-file" } }, { "entityReference": "role:default/test", "permission": "catalog.entity.create", "policy": "use", "effect": "allow", "metadata": { "source": "csv-file" } }, ]
- [GET] /api/permission/policies/{kind}/{namespace}/{name}
返回与指定实体引用相关的权限策略。
表 5.4. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
与实体相关的名称
字符串
必填
响应示例(JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow", "metadata": { "source": "csv-file" } }, { "entityReference": "role:default/test", "permission": "catalog.entity.create", "policy": "use", "effect": "allow", "metadata": { "source": "csv-file" } } ]
- [POST] /api/permission/policies
为指定实体创建权限策略。
表 5.5. 请求参数 名称 描述 类型 存在 entityReference
实体的引用值,包括
类型
、namespace
和name
字符串
必填
权限
特定插件、资源类型或名称的权限
字符串
必填
policy
权限的策略操作,如创建、
读取
、更新
、删除
或使用
字符串
必填
effect
表示允许或不允许策略
字符串
必填
请求正文示例(JSON)
[ { "entityReference": "role:default/test", "permission": "catalog-entity", "policy": "read", "effect": "allow" } ]
响应示例
201 Created
- [PUT] /api/permission/policies/{kind}/{namespace}/{name}
更新指定实体的权限策略。
请求参数
请求正文包含
oldPolicy
和newPolicy
对象:Name 描述 类型 存在 权限
特定插件、资源类型或名称的权限
字符串
必填
policy
权限的策略操作,如创建、
读取
、更新
、删除
或使用
字符串
必填
effect
表示允许或不允许策略
字符串
必填
请求正文示例(JSON)
{ "oldPolicy": [ { "permission": "catalog-entity", "policy": "read", "effect": "allow" }, { "permission": "catalog.entity.create", "policy": "create", "effect": "allow" } ], "newPolicy": [ { "permission": "catalog-entity", "policy": "read", "effect": "deny" }, { "permission": "policy-entity", "policy": "read", "effect": "allow" } ] }
响应示例
200
- [DELETE] /api/permission/policies/{kind}/{namespace}/{name}?permission={value1}&policy={value2}&effect={value3}
删除添加到指定实体的权限策略。
表 5.6. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
与实体相关的名称
字符串
必填
权限
特定插件、资源类型或名称的权限
字符串
必填
policy
权限的策略操作,如创建、
读取
、更新
、删除
或使用
字符串
必填
effect
表示允许或不允许策略
字符串
必填
响应示例
204 No Content
- [DELETE] /api/permission/policies/{kind}/{namespace}/{name}
删除添加到指定实体的所有权限策略。
表 5.7. 请求参数 名称 描述 类型 存在 kind
实体的类型
字符串
必填
namespace
实体的命名空间
字符串
必填
name
与实体相关的名称
字符串
必填
响应示例
204 No Content
- [GET] /api/permission/plugins/policies
返回所有静态插件的权限策略。
响应示例(JSON)
[ { "pluginId": "catalog", "policies": [ { "isResourced": true, "permission": "catalog-entity", "policy": "read" }, { "isResourced": false, "permission": "catalog.entity.create", "policy": "create" }, { "isResourced": true, "permission": "catalog-entity", "policy": "delete" }, { "isResourced": true, "permission": "catalog-entity", "policy": "update" }, { "isResourced": false, "permission": "catalog.location.read", "policy": "read" }, { "isResourced": false, "permission": "catalog.location.create", "policy": "create" }, { "isResourced": false, "permission": "catalog.location.delete", "policy": "delete" } ] }, ... ]
5.2.3. 条件策略
RBAC REST API 支持以下端点来管理 Red Hat Developer Hub 中的条件策略。
- [GET] /api/permission/plugins/condition-rules
为 Developer Hub 中启用的可用插件返回可用条件规则参数模式。
响应示例(JSON)
[ { "pluginId": "catalog", "rules": [ { "name": "HAS_ANNOTATION", "description": "Allow entities with the specified annotation", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "annotation": { "type": "string", "description": "Name of the annotation to match on" }, "value": { "type": "string", "description": "Value of the annotation to match on" } }, "required": [ "annotation" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "HAS_LABEL", "description": "Allow entities with the specified label", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "label": { "type": "string", "description": "Name of the label to match on" } }, "required": [ "label" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "HAS_METADATA", "description": "Allow entities with the specified metadata subfield", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Property within the entities metadata to match on" }, "value": { "type": "string", "description": "Value of the given property to match on" } }, "required": [ "key" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "HAS_SPEC", "description": "Allow entities with the specified spec subfield", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "key": { "type": "string", "description": "Property within the entities spec to match on" }, "value": { "type": "string", "description": "Value of the given property to match on" } }, "required": [ "key" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "IS_ENTITY_KIND", "description": "Allow entities matching a specified kind", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "kinds": { "type": "array", "items": { "type": "string" }, "description": "List of kinds to match at least one of" } }, "required": [ "kinds" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } }, { "name": "IS_ENTITY_OWNER", "description": "Allow entities owned by a specified claim", "resourceType": "catalog-entity", "paramsSchema": { "type": "object", "properties": { "claims": { "type": "array", "items": { "type": "string" }, "description": "List of claims to match at least one on within ownedBy" } }, "required": [ "claims" ], "additionalProperties": false, "$schema": "http://json-schema.org/draft-07/schema#" } } ] } ... <another plugin condition parameter schemas> ]
- [GET] /api/permission/roles/conditions/:id
返回指定 ID 的条件。
响应示例(JSON)
{ "id": 1, "result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": { "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] } }
- [GET] /api/permission/roles/conditions
返回所有角色的所有条件列表。
响应示例(JSON)
[ { "id": 1, "result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": { "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] } } ]
- [POST] /api/permission/roles/conditions
为指定角色创建条件策略。
表 5.8. 请求参数 名称 描述 类型 存在 result
始终值为
CONDITIONAL
字符串
必填
roleEntityRef
对 RBAC 角色的字符串实体引用,如
role:default/dev
字符串
必填
pluginId
对应的插件 ID,如
目录
字符串
必填
permissionMapping
数组权限操作,如
['read', 'update', 'delete']
字符串数组
必填
resourceType
插件提供的资源类型,如
catalog-entity
字符串
必填
conditions
带有参数或数组参数的条件 JSON,按条件加入
JSON
必填
name
角色的名称
字符串
必填
metadata.description
角色的描述
字符串
选填
请求正文示例(JSON)
{ "result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } } }
响应示例(JSON)
{ "id": 1 }
- [PUT] /permission/roles/conditions/:id
更新指定 ID 的条件策略。
表 5.9. 请求参数 名称 描述 类型 存在 result
始终值为
CONDITIONAL
字符串
必填
roleEntityRef
对 RBAC 角色的字符串实体引用,如
role:default/dev
字符串
必填
pluginId
对应的插件 ID,如
目录
字符串
必填
permissionMapping
数组权限操作,如
['read', 'update', 'delete']
字符串数组
必填
resourceType
插件提供的资源类型,如
catalog-entity
字符串
必填
conditions
带有参数或数组参数的条件 JSON,按条件加入
JSON
必填
name
角色的名称
字符串
必填
metadata.description
角色的描述
字符串
选填
请求正文示例(JSON)
{ "result": "CONDITIONAL", "roleEntityRef": "role:default/test", "pluginId": "catalog", "resourceType": "catalog-entity", "permissionMapping": ["read"], "conditions": { "anyOf": [ { "rule": "IS_ENTITY_OWNER", "resourceType": "catalog-entity", "params": { "claims": ["group:default/team-a"] } }, { "rule": "IS_ENTITY_KIND", "resourceType": "catalog-entity", "params": { "kinds": ["Group"] } } ] } }
响应示例
200
- [DELETE] /api/permission/roles/conditions/:id
删除指定 ID 的条件策略。
响应示例
204