权限控制
此 模块的 API 可以分为两类:
一类是权限管理、配置接口:
分组(Group)的增删改查接口
支持批量、分页
角色(Role)的增删改查接口
支持批量、分页
权限(Permission)的增删改查接口
支持批量、分页
分组内用户管理
分组内角色管理
角色内用户管理
角色内权限管理
另一类是查询特定用户权限接口:
查询特定用户所有权限列表
查询特定用户所有角色列表
查询特定用户所有分组列表
除了主动查询接口外,我们还支持将权限列表写入用户的 Token,开发者可以在本地使用应用密钥解密得到权限列表。最终的权限列表示例如下:
其中 email:login
完全为用户自定义,我们推荐使用 object:action 的格式进行命名。
开发者拿到用户权限列表之后,可以在业务代码层判断用户是否具备某一特定权限,如:
初始化
使用以下接口时,请先完成初始化工作,请参考:
异常处理
所有失败的操作,都需要使用 try catch 捕获异常。操作失败有两种情况:
网络请求出错,常见情况包括:传递参数不合法,这会被 GraphQL 过滤层直接拦截;网络无法连接。
业务逻辑出错,常见情况包括:密码不正确,删除某资源传递的 id 不存在等。
为了方便开发者快速定位出错原因,我们提供一个 formatError 函数:
示例如下:
分组增删改查
创建分组
Authing.authz.createGroup(input)
参数
input <Object>
name <string> 名称,必填。
description <string> 描述,选填。
使用方法
返回数据
修改分组
Authing.authz.updateGroup(input)
参数
input <Object>
_id <string> 分组 ID,必填。
name <string> 名称,选填。
description <string> 描述,选填。
使用方法
返回数据
本页中的所有修改接口均遵循以下逻辑:
_id 参数必填
出现在 input 中的字段值将替换原有值
没有出现在 input 中的字段值保持不变
传入 input 的多余字段将会被舍弃
查询分组
Authing.authz.group(_id)
参数
_id <string> 分组 ID,必填。
使用方法
返回数据
查询用户池分组列表
此方法支持分页、排序。
Authing.authz.groupList(options)
参数
options <Object> 可选
sortBy <string> 排序方式,可选。默认为 CREATEDAT_DESC ,表示按照创建时间降序,也就是最新创建的排在最前面。全部的可选值为:
CREATEDAT_DESC:按照创建时间降序。
CREATEDAT_ASC :按照创建时间升序。
UPDATEDAT_DESC:按照修改时间降序。
UPDATEDAT_ASC:按照修改时间排序。
page <int> 页码,可选。默认为 0,zero-based。
count <int> 没页数目,可选。默认为 10。
使用方法
返回数据
totalCount 总数
list 当前页列表
删除分组
Authing.authz.deleteGroup(_id)
参数
_id 分组 ID,必填。
使用方法
返回数据
操作成功示例
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
删除分组会将其与角色、用户之间的关系连带一起删除(角色、用户本身不会删除),不可撤回,请谨慎操作。
且此操作为原子化操作,要么成功,要么全部 rollback。
批量删除分组
Authing.authz.deleteGroupBatch(idList)
参数
idList: <Array> 分组 ID 列表。
使用方法
返回参数
操作成功示例:
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
此操作不可撤回,请谨慎操作。
角色增删改查
创建角色
Authing.authz.createRole(input)
参数
input <Object>
name: 名称,必填。
description: 描述,必填。
使用方法
返回数据
分组(Group)和角色(Role)有什么区别?
角色是一组权限的集合。
分组侧重于管理用户,一个分组通常拥有多个角色,分组内的用户会继承分组内所有角色的所有权限。
常见的 Group 和 Role 示例:
Group
admin: 系统管理员,通常包含系统维护者。
employee: 正式雇员。
employer: 面试官。
hr
intern: 实习生
ops_engineer: 运维工程师
Role
Invoice Submitter: 具备发票报销的相关权限。
Vacation Requester: 具备申请假期的相关权限。
Corporation Email User: 具备使用公司邮箱的的相关权限。
Production Server Operator: 具备线上服务器的操作权限。
HR App User: 具备使用 HR 系统的相关权限。
举例来说:可以这样建立 Role 和 Group 之间的关系:
intern 具备 Corporation Email User 这个角色,但是不具备 Vacation Requester 和 Invoice Submitter 这两个角色。
employee 拥有发票报销和申请假期角色,但是不具备线上服务器的操作权限。
ops_engineer 拥有发票报销、申请假期、线上服务器的角色。
推荐使用 Group organize 用户,用 Role organize 权限,不要直接赋予单个用户某个权限。如果是某个用户临时需要具备某个角色,可以临时授予,结束之后再收回。
修改角色
Authing.authz.updateRole(input)
参数
input <Object>
_id: 角色 ID,必填。
name: 角色名称,选填。
description:角色描述,选填。
使用方法
返回数据
查询角色
Authing.authz.role(_id)
参数
_id <string> 角色 ID,必填。
使用方法
返回数据
查询用户池角色列表
此方法支持分页、排序。
Authing.authz.roleList(options)
参数
options <Object> 可选
sortBy <string> 排序方式,可选。默认为 CREATEDAT_DESC ,表示按照创建时间降序,也就是最新创建的排在最前面。全部的可选值为:
CREATEDAT_DESC:按照创建时间降序。
CREATEDAT_ASC :按照创建时间升序。
UPDATEDAT_DESC:按照修改时间降序。
UPDATEDAT_ASC:按照修改时间排序。
page <int> 页码,可选。默认为 0,zero-based。
count <int> 没页数目,可选。默认为 10。
使用方法
返回数据
totalCount 总数
list 当前页列表
删除角色
Authing.authz.deleteRole(_id)
参数
_id 角色 ID,必填。
使用方法
返回数据
操作成功示例
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
删除角色会将其与权限、用户之间的关系连带一起删除(权限、用户本身不会删除),不可撤回,请谨慎操作。
且此操作为原子化操作,要么成功,要么全部 rollback。
批量删除角色
Authing.authz.deleteRoleBatch(idList)
参数
idList: <Array> 分组 ID 列表。
使用方法
返回参数
操作成功示例:
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
此操作不可撤回,请谨慎操作。
权限增删改查
创建权限
Authing.authz.createPermission(input)
参数
input <Object>
name <string> 名称,必填。
description <string> 描述,选填。
使用方法
返回数据
推荐使用 subject:action 这类形式命名权限。如:
invoice:submit 提交发票报销申请
invoice:revoke 撤回发票报销申请
invoice:update 修改发起申请详情
invoice:list 查看发起申请历史记录
invoice:read 查看发票申请详情
修改权限
Authing.authz.updatePermission(input)
参数
input <Object>
_id: 角色 ID,必填。
name: 角色名称,选填。
description:角色描述,选填。
使用方法
返回数据
查询权限
Authing.authz.permission(_id)
参数
_id <string> 权限 ID,必填。
使用方法
返回数据
查询用户池权限列表
此方法支持分页、排序。
Authing.authz.permissionList(options)
参数
options <Object> 可选
sortBy <string> 排序方式,可选。默认为 CREATEDAT_DESC ,表示按照创建时间降序,也就是最新创建的排在最前面。全部的可选值为:
CREATEDAT_DESC:按照创建时间降序。
CREATEDAT_ASC :按照创建时间升序。
UPDATEDAT_DESC:按照修改时间降序。
UPDATEDAT_ASC:按照修改时间排序。
page <int> 页码,可选。默认为 0,zero-based。
count <int> 没页数目,可选。默认为 10。
使用方法
返回数据
totalCount 总数
list 当前页列表
删除权限
Authing.authz.deletePermission(_id)
参数
_id 权限 ID,必填。
使用方法
返回数据
操作成功示例
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
删除角色会将其与权限、用户之间的关系连带一起删除(权限、用户本身不会删除),不可撤回,请谨慎操作。
且此操作为原子化操作,要么成功,要么全部 rollback。
批量删除权限
Authing.authz.deletePermissionBatch(idList)
参数
idList: <Array> 分组 ID 列表。
使用方法
返回参数
操作成功示例:
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
此操作不可撤回,请谨慎操作。
分组内角色管理
推荐使用 Group 管理用户,用 Role 管理权限,不要直接赋予单个用户某个权限。如果是某个用户临时需要具备某个角色,可以临时授予,结束之后再收回。
查询分组角色列表
Authing.authz.groupRoleList(_id)
参数
_id <string> 分组 ID
使用方法
返回数据
分组添加角色
Authing.authz.addRoleToGroup(input, options)
参数:
input <Object> 必填
groupId: <string> 分组 ID,必填。
roleId: <string> 角色 ID,必填。
options <Object> 选填
fetchRoles <boolean> 是否在结果中返回最新的角色列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
分组删除角色
authing.authz.removeRoleFromGroup(input, options)
参数
input <Object>
groupId 分组 ID,必填。
roleId 角色 ID, 必填。
options <Object> 选填
fetchRoles <boolean> 是否在结果中返回最新的角色列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
分组批量添加角色
Authing.authz.addRoleToGroupBatch(input, options)
参数:
input <Object> 必填
groupId: 分组 ID,必填。
roleIdList: 角色 ID 列表,必填。
options <Object> 选填
fetchRoles <boolean> 是否在结果中返回最新的角色列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
分组批量删除角色
Authing.authz.removeRoleFromGroupBatch(input, options)
参数
input <Object> 必填
groupId: 分组 ID,必填。
roleIdList: 角色 ID 列表,必填。
options <object> 选填
fetchRoles <boolean> 是否在结果中返回最新的角色列表。选填,默认为 false。
使用方法
返回参数
操作成功示例:
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
此操作不可撤回,请谨慎操作。
分组内用户管理
查询分组内用户列表
此方法支持分页、排序。
Authing.authz.groupUserList(_id, options)
参数
_id: 分组ID
options <Object> 可选
sortBy <string> 排序方式,可选。默认为 CREATEDAT_DESC ,表示按照创建时间降序,也就是最新创建的排在最前面。全部的可选值为:
CREATEDAT_DESC:按照创建时间降序。
CREATEDAT_ASC :按照创建时间升序。
UPDATEDAT_DESC:按照修改时间降序。
UPDATEDAT_ASC:按照修改时间排序。
page <int> 页码,可选。默认为 0,zero-based。
count <int> 没页数目,可选。默认为 10。
使用方法
返回数据
totalCount 总数
list 当前页列表
分组添加用户
Authing.authz.addUserToGroup(input, options)
参数:
input <Object>
groupId: 分组 ID,必填。
userId: 用户 ID,必填。
options <object> 选填
fetchUsers <boolean> 是否在结果中返回最新的用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
分组删除用户
Authing.authz.removeUserFromGroup(input, options)
参数:
input: <Object>
groupId: <string> 分组 ID,必填。
userId: <string> 用户 ID,必填。
options <object> 选填
fetchUsers <boolean> 是否在结果中返回最新的用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
分组批量添加用户
Authing.authz.addUserToGroupBatch(input, options)
参数:
input: <Object>
groupId: 分组 ID,必填。
userIdList: 用户 ID,必填。
options <object> 选填
fetchUsers <boolean> 是否在结果中返回最新的用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
分组批量删除用户
Authing.authz.removeUserFromGroupBatch(input, options)
参数:
input: <Object>
groupId: 分组 ID,必填。
userIdList: 用户 ID 列表,必填。
options <object> 选填
fetchUsers <boolean> 是否在结果中返回最新的用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
此操作不可撤回,请谨慎操作。
角色内用户管理
查询具备某角色的用户列表
此方法支持分页、排序。
Authing.authz.roleUserList(_id, options)
参数
_id: 角色ID
options <Object> 可选
sortBy <string> 排序方式,可选。默认为 CREATEDAT_DESC ,表示按照创建时间降序,也就是最新创建的排在最前面。全部的可选值为:
CREATEDAT_DESC:按照创建时间降序。
CREATEDAT_ASC :按照创建时间升序。
UPDATEDAT_DESC:按照修改时间降序。
UPDATEDAT_ASC:按照修改时间排序。
page <int> 页码,可选。默认为 0,zero-based。
count <int> 没页数目,可选。默认为 10。
使用方法
返回数据
totalCount 总数
list 当前页列表
授权用户某角色
Authing.authz.assignRoleToUser(input, options)
参数:
options <Object> 必填
userId: <string> 用户 ID,必填。
roleId: <string> 角色 ID,必填。
input <Object> 选填
fetchUsers <boolean> 是否在结果中返回角色中包含的最新用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
一个用户最多同时具有 50 个角色。
批量授权用户某角色
Authing.authz.assignRoleToUserBatch(input, options)
参数:
input <Object> 必填
userId: <string> 用户 ID,必填。
roleId: <string> 角色 ID,必填。
options <Object> 选填
fetchUsers <boolean> 是否在结果中返回角色中包含的最新用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
撤权用户某角色
Authing.authz.revokeRoleFromUser(input, options)
参数:
input <Object> 必填
userId: <string> 用户 ID,必填。
roleId: <string> 角色 ID,必填。
options <Object> 选填
fetchUsers <boolean> 是否在结果中返回角色中包含的最新用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
批量撤权用户某角色
Authing.authz.revokeRoleFromUser(input, options)
参数:
input <Object> 必填
userId: <string> 用户 ID,必填。
roleId: <string> 角色 ID,必填。
options <Object> 选填
fetchUsers <boolean> 是否在结果中返回角色中包含的最新用户列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
角色内权限管理
查询某角色具备的所有权限
此方法支持分页、排序。
Authing.authz.rolePermissionList(_id)
参数
_id: <string> 角色ID
使用方法
返回数据
totalCount 总数
list 当前页列表
角色添加权限
Authing.authz.addPermissionToRole(input, options)
参数:
input <Object>
permissionId: <string> 权限 ID,必填。
roleId: <string> 角色 ID,必填。
options <object> 选填
fetchPermissions <boolean> 是否在结果中返回最新的权限列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
角色批量添加权限
Authing.authz.addPermissionToRoleBatch(input, options)
参数:
input <Object>
permissionIdList: <Array> 权限 ID 列表,必填。
roleId: <string> 角色 ID,必填。
options <object> 选填
fetchPermissions <boolean> 是否在结果中返回最新的权限列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
角色删除权限
Authing.authz.removePermissionFromRole(input, options)
参数:
input <Object>
permissionId: <string> 权限 ID,必填。
roleId: <string> 角色 ID,必填。
options <object> 选填
fetchPermissions <boolean> 是否在结果中返回最新的权限列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
角色批量删除权限
Authing.authz.removePermissionFromRoleBatch(input, options)
参数:
input <Object>
permissionId: <string> 权限 ID,必填。
roleId: <string> 角色 ID,必填。
options <object> 选填
fetchPermissions <boolean> 是否在结果中返回最新的权限列表。选填,默认为 false。
使用方法
返回数据
操作成功示例:
如果操作失败,需要使用 try catch 捕捉异常,详情见 异常处理 部分。
批量操作,当且仅当所有操作成功时才会返回成功,如果其中任意一个步骤失败,其他所有操作将会 rollback,回退到之前的状态。操作失败需要用 try/catch 捕获异常,详情见异常处理部分。
错误码
角色权限管理的相关错误码以 39xx 开头。
如何获取错误码? 如下所示:
错误码
说明
2020
尚未登录,无访问权限
3901
Group 不存在
3902
无权操作此 Group
3903
Role 不存在
3904
无权操作此 Role
3905
Permission 不存在
3906
无权操作此 Permission
3907
删除 Group 失败
3910
Role ${role.name} 已在 Group ${group.name} 中了
3911
Role ${role.name} 不在 Group ${group.name} 中
3912
User ${user._id} 已在 Group ${group.name} 中了
3913
User ${user._id} 不在 Group ${group.name} 中
3914
删除 Permission 失败
3915
删除 Role 失败
3916
Permission ${permission.name} 已在 Role ${role.name} 中了
3917
Permission ${permission.name} 不在 Role ${role.name} 中
3918
User ${user._id} 已具备 Role ${role.name}
3919
User ${user._id} 不具备 Role ${role.name}
Last updated