自定义权限点
适用环境 | SaaS |
私有部署 |
要求
ONES |
---|
v3.10.14+ |
概述
有时候插件自定义的内容也需要控制访问权限,只依赖 ONES 已有的权限校验无法满足插件自定义内容的权限控制。因此我们提供自定义权限点能力,使用该能力可以对插件自定义内容进行访问限制。例如:当插件的前端需要实现分"级别"的页面,不同的用户(群组)具备不同的访问范围时,可以使用该能力进行权限控制。
备注
使用该能力添加的权限点只在插件内生效,即只能控制插件添加内容的访问权限。
能力表现
使用能力添加了权限之后,在插件详情的权限配置页有相关权限配置。
使用
自定义权限能力支持通过 自定义的标准权限配置、自定义权限点 API 和 自定义权限点能力 三种方式使用自定义权限点。自定义的权限点目前只能配合前端插 槽使用,具体使用方法请参照:permission
警告
只有通过能力添加的权限点才能由插件自定义权限校验逻辑,其他都是使用 ONES 原有权限校验逻辑。
自定义的标准权限配置
在插件的配置文件中添加自定义的标准权限点配置项数组
参数:
参数 | 说明 | 类型 | 必填 | 默认值 |
---|---|---|---|---|
name | 权限名称 | string | 是 | - |
field | 权限唯一标识 | string | 是 | - |
desc | 权限描述 | string | 否 | - |
示例:
config/plugin.yaml
service:
permission:
- name: My custom read permission
field: my-custom-read-permission-key
desc: This is an example of custom read permission
自定义权限点 API - 后端
提供非声明式的权限点定义和配置方法,在插件后端中可以使用这些 API 来管理自定义权限。
备注
示例中均通过 ONES 接口注册 能力添加 addition
接口进行调试
添加权限点
入参:
参数 | 说明 | 类型 | 必填 |
---|---|---|---|
path | 路由,固定值: AddPermissionInfo | string | 是 |
headers | 请求头,固定值: { "AbilityName": ["AddPermissionInfo"] } | any | 是 |
method | 请求方法,固定值:POST | string | 是 |
body | 请求体,包含权限点信息。 | any | 是 |
body
参数 | 说明 | 类型 | 必填 |
---|---|---|---|
permission_name | 权限点名称 | string | 是 |
permission_field | 权限点标识 | string | 是 |
permission_desc | 权限点描述 | string | 是 |
返回内容:response.body['data']
中的内容
-
正常
参数 说明 类型 备注 instance_uuid 插件示例 id string permission_name 权限点名称 string permission_desc 权限点描述 string permission_field 权限点唯一标识 string permission_id 权限点 id string check_mode 校验类型 string ability_id 能力 id string -
错误
当添加的权限点已经存在时返回:permission_field of plugin already exists
示例:
export async function addPermission(request: PluginRequest): Promise<PluginResponse> {
const response = await fetchONES({
path: `AddPermissionInfo`,
headers: {
AbilityName: ['AddPermissionInfo'],
},
method: 'POST',
body: {
permission_name: 'api_add_permission', // 权限点名称
permission_field: 'api_add_permission123', // 权限点唯一标识
permission_desc: 'test', // 插件点描述
},
})
const body = response?.body as any
const data = JSON.parse(body.toString())['data']
Logger.info(data)
return {
body: {
data: data,
},
}
}
获取权限点
入参:
参数 | 说明 | 类型 | 必填 |
---|---|---|---|
path | 路由,固定值: PermissionInfoList | string | 是 |
headers | 请求头,固定值: { "AbilityName": ["PermissionInfoList"] } | any | 是 |
method | 请求方法,固定值:POST | string | 是 |
teamUUID | 团队id | string | 是 |
返回内容: response.body['data']
中的内容,包含权限点信息数组,每个权限点包含以下内容
permission
参数 | 说明 | 类型 |
---|---|---|
instance_uuid | 插件示例 id | string |
permission_name | 权限点名称 | string |
permission_desc | 权限点描述 | string |
permission_field | 权限点唯一标识 | string |
permission_id | 权限点 id | string |
check_mode | 校验类型 | string |
rule_info | 已配置规则的信息 | rule[] |