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