【8.0】【role】获取角色权限绑定列表,增加范围控制

pull/57/head
fengshuonan 2023-09-08 22:41:33 +08:00
parent 844379e6c0
commit 757f5826cc
4 changed files with 40 additions and 8 deletions

View File

@ -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);
/** /**
* *

View File

@ -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<>();
} }

View File

@ -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
* *

View File

@ -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);
// 组装所有的应用节点信息【初始化菜单功能】 // 组装所有的应用节点信息【初始化菜单功能】