4.3. 支持的 RBAC REST API 端点
RBAC REST API 提供了在 Developer Hub 中管理角色、权限和条件策略的端点,并检索有关角色和策略的信息。
4.3.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 中创建角色。
Expand 表 4.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对象:Expand 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 中的角色中删除指定的用户或组。
Expand 表 4.2. 请求参数 名称 描述 类型 存在 kind实体的类型
字符串
必填
namespace实体的命名空间
字符串
必填
名称实体的名称
字符串
必填
memberReferences关联的组信息
字符串
必填
响应示例
204- [DELETE] /api/permission/roles/ <kind> / <namespace> / <name>
从 Developer Hub 删除指定的角色。
Expand 表 4.3. 请求参数 名称 描述 类型 存在 kind实体的类型
字符串
必填
namespace实体的命名空间
字符串
必填
名称实体的名称
字符串
必填
响应示例
204
4.3.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>
返回与指定实体引用相关的权限策略。
Expand 表 4.4. 请求参数 名称 描述 类型 存在 kind实体的类型
字符串
必填
namespace实体的命名空间
字符串
必填
名称与实体相关的名称
字符串
必填
响应示例(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
为指定实体创建权限策略。
Expand 表 4.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对象:Expand 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}
删除添加到指定实体的权限策略。
Expand 表 4.6. 请求参数 名称 描述 类型 存在 kind实体的类型
字符串
必填
namespace实体的命名空间
字符串
必填
名称与实体相关的名称
字符串
必填
权限特定插件、资源类型或名称的权限
字符串
必填
policy权限的策略操作,如创建、
读取、更新、删除或使用字符串
必填
effect表示允许或不允许策略
字符串
必填
响应示例
204 No Content- [DELETE] /api/permission/policies/ <kind> / <namespace> / <name>
删除添加到指定实体的所有权限策略。
Expand 表 4.7. 请求参数 名称 描述 类型 存在 kind实体的类型
字符串
必填
namespace实体的命名空间
字符串
必填
名称与实体相关的名称
字符串
必填
响应示例
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" } ] }, ... ]
4.3.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
为指定角色创建条件策略。
Expand 表 4.8. 请求参数 名称 描述 类型 存在 result始终值为
CONDITIONAL字符串
必填
roleEntityRef对 RBAC 角色的字符串实体引用,如
role:default/dev字符串
必填
pluginId对应的插件 ID,如
目录字符串
必填
permissionMapping数组权限操作,如
['read', 'update', 'delete']字符串数组
必填
resourceType插件提供的资源类型,如
catalog-entity字符串
必填
conditions带有参数或数组参数的条件 JSON,按条件加入
JSON
必填
名称角色的名称
字符串
必填
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 的条件策略。
Expand 表 4.9. 请求参数 名称 描述 类型 存在 result始终值为
CONDITIONAL字符串
必填
roleEntityRef对 RBAC 角色的字符串实体引用,如
role:default/dev字符串
必填
pluginId对应的插件 ID,如
目录字符串
必填
permissionMapping数组权限操作,如
['read', 'update', 'delete']字符串数组
必填
resourceType插件提供的资源类型,如
catalog-entity字符串
必填
conditions带有参数或数组参数的条件 JSON,按条件加入
JSON
必填
名称角色的名称
字符串
必填
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
4.3.4. 用户统计 复制链接链接已复制到粘贴板!
licensed-users-info-backend 插件公开各种 REST API 端点,以检索与登录用户相关的数据。
licensed-users-info-backend 插件不需要额外的配置。如果启用了 RBAC 后端插件,则必须分配管理员角色来访问端点,因为端点由 policy.entity.read 权限保护。
用户统计端点的基本 URL 是 http://SERVER:PORT/api/licensed-users-info,如 http://localhost:7007/api/licensed-users-info。
- [GET] /users/quantity
返回登录用户总数。
请求示例
curl -X GET "http://localhost:7007/api/licensed-users-info/users/quantity" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $token"响应示例
{ "quantity": "2" }- [GET] /users
返回登录的用户列表及其详情。
请求示例
curl -X GET "http://localhost:7007/api/licensed-users-info/users" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $token"响应示例
[ { "userEntityRef": "user:default/dev", "lastTimeLogin": "Thu, 22 Aug 2024 16:27:41 GMT", "displayName": "John Leavy", "email": "dev@redhat.com" } ]- [GET] /users
返回 CSV 格式的登录用户列表。
请求示例
curl -X GET "http://localhost:7007/api/licensed-users-info/users" \ -H "Content-Type: text/csv" \ -H "Authorization: Bearer $token"响应示例
userEntityRef,displayName,email,lastTimeLogin user:default/dev,John Leavy,dev@redhat.com,"Thu, 22 Aug 2024 16:27:41 GMT"