mirror of https://gitee.com/stylefeng/roses
【8.0】【role】获取角色权限绑定列表,增加范围控制
parent
844379e6c0
commit
757f5826cc
|
@ -85,7 +85,7 @@ public interface SysMenuService extends IService<SysMenu>, SysMenuServiceApi {
|
|||
* @author fengshuonan
|
||||
* @since 2023/6/15 9:24
|
||||
*/
|
||||
List<SysMenu> getTotalMenus(List<Long> limitMenuIds);
|
||||
List<SysMenu> getTotalMenus(Set<Long> limitMenuIds);
|
||||
|
||||
/**
|
||||
* 调整菜单上下级结构和菜单的顺序
|
||||
|
|
|
@ -158,7 +158,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<SysMenu> getTotalMenus(List<Long> limitMenuIds) {
|
||||
public List<SysMenu> getTotalMenus(Set<Long> limitMenuIds) {
|
||||
if (ObjectUtil.isEmpty(limitMenuIds)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
|
|
@ -27,12 +27,24 @@ public interface PermissionAssignService extends UserDataScopeApi {
|
|||
|
||||
/**
|
||||
* 构建一个权限树,包含了空的选择状态
|
||||
* <p>
|
||||
* 包含所有的菜单和菜单功能的结构
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/13 16:17
|
||||
*/
|
||||
RoleBindPermissionResponse createSelectTreeStructure();
|
||||
|
||||
/**
|
||||
* 构建一个权限树,包含了空的选择状态
|
||||
* <p>
|
||||
* 包含指定范围内的菜单和菜单功能的结构
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @since 2023/6/13 16:17
|
||||
*/
|
||||
RoleBindPermissionResponse createSelectTreeStructure(Set<Long> limitMenuIdsAndOptionIds);
|
||||
|
||||
/**
|
||||
* 获取角色绑定的菜单和菜单功能,直接返回菜单和菜单功能组成的id集合
|
||||
*
|
||||
|
|
|
@ -69,16 +69,22 @@ public class PermissionAssignServiceImpl implements PermissionAssignService {
|
|||
@Resource
|
||||
private SysRoleDataScopeService sysRoleDataScopeService;
|
||||
|
||||
@Resource
|
||||
private SysUserRoleServiceApi userRoleServiceApi;
|
||||
|
||||
@Override
|
||||
public RoleBindPermissionResponse getRoleBindPermission(RoleBindPermissionRequest roleBindPermissionRequest) {
|
||||
|
||||
// 1. 整理出一个总的响应的结构树,选择状态为空
|
||||
RoleBindPermissionResponse selectTreeStructure = this.createSelectTreeStructure();
|
||||
// 1. 获取角色的限制范围,如果限制范围为空,则为查询所有的范围
|
||||
Set<Long> userRoleLimitScope = userRoleServiceApi.findCurrentUserRoleLimitScope();
|
||||
|
||||
// 2. 获取角色绑定的应用,菜单,功能列表
|
||||
// 2. 整理出一个总的响应的结构树,选择状态为空
|
||||
RoleBindPermissionResponse selectTreeStructure = this.createSelectTreeStructure(userRoleLimitScope);
|
||||
|
||||
// 3. 获取角色绑定的应用,菜单,功能列表
|
||||
Set<Long> roleBindMenusAndOptions = this.getRoleBindMenusAndOptions(roleBindPermissionRequest.getRoleId());
|
||||
|
||||
// 3. 组合结构树和角色绑定的信息,填充选择状态,封装返回结果
|
||||
// 4. 组合结构树和角色绑定的信息,填充选择状态,封装返回结果
|
||||
return PermissionAssignFactory.fillCheckedFlag(selectTreeStructure, roleBindMenusAndOptions);
|
||||
}
|
||||
|
||||
|
@ -100,9 +106,19 @@ public class PermissionAssignServiceImpl implements PermissionAssignService {
|
|||
|
||||
@Override
|
||||
public RoleBindPermissionResponse createSelectTreeStructure() {
|
||||
return this.createSelectTreeStructure(null);
|
||||
}
|
||||
|
||||
// 获取所有的菜单
|
||||
List<SysMenu> totalMenus = this.sysMenuService.getTotalMenus();
|
||||
@Override
|
||||
public RoleBindPermissionResponse createSelectTreeStructure(Set<Long> limitMenuIdsAndOptionIds) {
|
||||
|
||||
// 获取指定所有的菜单,如果不限制范围,则直接查询所有的菜单
|
||||
List<SysMenu> totalMenus = null;
|
||||
if (ObjectUtil.isEmpty(limitMenuIdsAndOptionIds)) {
|
||||
totalMenus = this.sysMenuService.getTotalMenus();
|
||||
} else {
|
||||
totalMenus = this.sysMenuService.getTotalMenus(limitMenuIdsAndOptionIds);
|
||||
}
|
||||
|
||||
// 组装所有的叶子节点菜单【初始化菜单】
|
||||
List<RoleBindPermissionItem> totalResultMenus = PermissionAssignFactory.createPermissionMenus(totalMenus);
|
||||
|
@ -123,6 +139,10 @@ public class PermissionAssignServiceImpl implements PermissionAssignService {
|
|||
optionsLambdaQueryWrapper.select(SysMenuOptions::getMenuId, SysMenuOptions::getMenuOptionId, SysMenuOptions::getOptionName);
|
||||
Set<String> menuIds = totalResultMenus.stream().map(RoleBindPermissionItem::getNodeId).collect(Collectors.toSet());
|
||||
optionsLambdaQueryWrapper.in(SysMenuOptions::getMenuId, menuIds);
|
||||
// 如果限制了范围,则只查询限制范围内的功能
|
||||
if (ObjectUtil.isNotEmpty(limitMenuIdsAndOptionIds)) {
|
||||
optionsLambdaQueryWrapper.in(SysMenuOptions::getMenuOptionId, limitMenuIdsAndOptionIds);
|
||||
}
|
||||
List<SysMenuOptions> sysMenuOptionsList = sysMenuOptionsService.list(optionsLambdaQueryWrapper);
|
||||
|
||||
// 组装所有的应用节点信息【初始化菜单功能】
|
||||
|
|
Loading…
Reference in New Issue