说明:
一个用户可以拥有多个角色, hzero有"角色合并"功能, 开启"角色合并"后对功能、接口有哪些影响?
比如:
登录时显示的菜单是所有角色的菜单还是当前角色的菜单?
菜单管理时, 管理的是所有角色的菜单还是当前角色的菜单?
角色管理时, 管理的是所有角色的菜单还是当前角色的菜单?
网关鉴权时, 校验的是所有角色的权限还是当前角色的权限?
相关功能、接口
角色的获取
CustomUserDetails对象:
getRoleId() 获取当前角色
roleMergeIds() 获取合并的角色列表
登陆时查询菜单
/iam/v1/menus/tree?lang=zh_CN&unionLabel=false
登陆时查询菜单树;
实测: 有合并角色的效果;
/iam/v1/menus/tree?labels=IOSP_MENU&lang=zh_CN&roldId=142310205194166272&unionLabel=false 这里的roleId参数无效;
代码考虑了角色合并:
MenuController#listNavMenuTree
MenuRepositoryImpl#selectRoleMenuTree
List<Long> roleIds = self.roleMergeIds();
List<Menu> menus = menuMapper.selectRoleMenus(roleIds, tenantId, finalLang, labels, unionLabel);
【菜单配置】
/iam/v1/0/menus/manage-tree?page=0&scope=CUSTOM&size=10
只过滤了当前角色:
MenuRepositoryImpl#selectMenuTreeInTenant
menuParams.setRoleId(self.getRoleId());
【角色管理】
/iam/v1/roles/self/manageable-roles?adminRoleId=142310205194166272&page=0&size=10
只过滤了当前角色:
RoleController#listSelfManageableRoles
RoleServiceImpl#selectSelfManageableRoles
RoleRepositoryImpl#selectSelfManageableRoles
params.setUserId(self.getUserId());
权限检查
/iam/v1/menus/check-permissions
实测: 有合并角色的效果;
考虑了合并角色
MenuController#checkPermissions
MenuRepositoryImpl#checkPermissionSets(java.util.List<java.lang.String>)
results = menuMapper.checkPermissionSets(self.roleMergeIds(), codes);
网关权限检查
实测: 有合并角色的效果;
user考虑了合并角色, client没有角色合并;
CommonRequestCheckFilter#run
roleIds = details.roleMergeIds();
角色分配api时能够查看的api列表
单据权限、数据权限, 应该可以;
实测: 可以
constant.DocTypeScript
"<bind name=\"roleMergeIdList\" value=\"@xjyt.sjgs.core.oauth.DetailsHelper@getUserDetails().roleMergeIds()\" /> \n" +
前端切换当前角色按钮的显示/隐藏
如果返回的是空列表, 就不显示切换角色:
/iam/v1/member-roles/self-roles
MemberRoleController#listSelfRoles
RoleRepositoryImpl#selectSelfCurrentTenantRoles
// 如果只有一个层级的角色 则不返回角色列表,否则按层级分组,每个层级只返回一个角色