HZERO微服务平台08: 角色合并功能梳理

说明:

一个用户可以拥有多个角色, 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
// 如果只有一个层级的角色 则不返回角色列表,否则按层级分组,每个层级只返回一个角色
原文地址:https://www.cnblogs.com/QIAOXINGXING001/p/15594754.html