【7.6.0】【role】调整角色绑定菜单业务顺序

pull/57/head
fengshuonan 2023-07-01 21:22:23 +08:00
parent 22ba1d2682
commit 47a98889a6
1 changed files with 28 additions and 26 deletions

View File

@ -18,11 +18,9 @@ import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleMenu;
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleMenuOptions; import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleMenuOptions;
import cn.stylefeng.roses.kernel.sys.modular.role.enums.PermissionNodeTypeEnum; import cn.stylefeng.roses.kernel.sys.modular.role.enums.PermissionNodeTypeEnum;
import cn.stylefeng.roses.kernel.sys.modular.role.enums.exception.SysRoleMenuExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.role.enums.exception.SysRoleMenuExceptionEnum;
import cn.stylefeng.roses.kernel.sys.modular.role.factory.PermissionAssignResultFactory;
import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleMenuMapper; import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleMenuMapper;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest; import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleMenuRequest; import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleMenuRequest;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionItem;
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService; import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService;
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService; import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -162,36 +160,49 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRo
} }
@Override @Override
public List<RoleBindPermissionItem> doOperateAction(RoleBindPermissionRequest roleBindPermissionRequest) { public void doOperateAction(RoleBindPermissionRequest roleBindPermissionRequest) {
Long roleId = roleBindPermissionRequest.getRoleId(); Long roleId = roleBindPermissionRequest.getRoleId();
Long menuId = roleBindPermissionRequest.getNodeId(); Long menuId = roleBindPermissionRequest.getNodeId();
// 1. 首先进行角色和菜单的绑定 // 1. 先取消绑定角色和菜单
SysRoleMenu sysRoleMenu = new SysRoleMenu(); LambdaQueryWrapper<SysRoleMenu> sysRoleMenuLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysRoleMenu.setRoleId(roleId); sysRoleMenuLambdaQueryWrapper.eq(SysRoleMenu::getMenuId, menuId);
sysRoleMenu.setMenuId(menuId); sysRoleMenuLambdaQueryWrapper.eq(SysRoleMenu::getRoleId, roleId);
this.remove(sysRoleMenuLambdaQueryWrapper);
// 2. 如果是选中,则执行菜单和角色的绑定
// 查询菜单对应的appId冗余一下appId
Map<Long, Long> menuAppIdMap = sysMenuService.getMenuAppId(ListUtil.list(false, menuId)); Map<Long, Long> menuAppIdMap = sysMenuService.getMenuAppId(ListUtil.list(false, menuId));
Long appId = menuAppIdMap.get(menuId); Long appId = menuAppIdMap.get(menuId);
sysRoleMenu.setAppId(appId); if (roleBindPermissionRequest.getChecked()) {
SysRoleMenu sysRoleMenu = new SysRoleMenu();
sysRoleMenu.setRoleId(roleId);
sysRoleMenu.setMenuId(menuId);
sysRoleMenu.setAppId(appId);
this.save(sysRoleMenu);
}
// 2. 查询菜单下所有的菜单功能 // 3. 查询菜单下是否有菜单功能,如果有菜单功能,则也直接清空掉
LambdaQueryWrapper<SysMenuOptions> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysMenuOptions> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysMenuOptions::getMenuId, menuId); queryWrapper.eq(SysMenuOptions::getMenuId, menuId);
queryWrapper.select(SysMenuOptions::getMenuOptionId, SysMenuOptions::getOptionName); queryWrapper.select(SysMenuOptions::getMenuOptionId, SysMenuOptions::getOptionName);
List<SysMenuOptions> totalMenuOptions = sysMenuOptionsService.list(queryWrapper); List<SysMenuOptions> totalMenuOptions = sysMenuOptionsService.list(queryWrapper);
if(ObjectUtil.isNotEmpty(totalMenuOptions)) { // 菜单下没有菜单功能,则直接返回
// 3. 先删除已经绑定的所有角色和功能的绑定 if (ObjectUtil.isEmpty(totalMenuOptions)) {
LambdaQueryWrapper<SysRoleMenuOptions> roleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>(); return;
roleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
roleMenuOptionsLambdaQueryWrapper.in(SysRoleMenuOptions::getMenuOptionId,
totalMenuOptions.stream().map(SysMenuOptions::getMenuOptionId).collect(Collectors.toSet()));
sysRoleMenuOptionsService.remove(roleMenuOptionsLambdaQueryWrapper);
} }
// 4. 如果有菜单功能,则执行先删除后添加的逻辑
// 先删除角色和菜单功能的绑定
LambdaQueryWrapper<SysRoleMenuOptions> roleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
roleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
roleMenuOptionsLambdaQueryWrapper.in(SysRoleMenuOptions::getMenuOptionId,
totalMenuOptions.stream().map(SysMenuOptions::getMenuOptionId).collect(Collectors.toSet()));
sysRoleMenuOptionsService.remove(roleMenuOptionsLambdaQueryWrapper);
// 4. 如果是选中状态,则从新进行这些角色和功能的绑定 // 5. 如果是选中状态,则从新进行这些角色和功能的绑定
if (roleBindPermissionRequest.getChecked()) { if (roleBindPermissionRequest.getChecked()) {
ArrayList<SysRoleMenuOptions> sysRoleMenuOptions = new ArrayList<>(); ArrayList<SysRoleMenuOptions> sysRoleMenuOptions = new ArrayList<>();
for (SysMenuOptions totalMenuOption : totalMenuOptions) { for (SysMenuOptions totalMenuOption : totalMenuOptions) {
@ -203,16 +214,7 @@ public class SysRoleMenuServiceImpl extends ServiceImpl<SysRoleMenuMapper, SysRo
sysRoleMenuOptions.add(roleMenuOptions); sysRoleMenuOptions.add(roleMenuOptions);
} }
this.sysRoleMenuOptionsService.saveBatch(sysRoleMenuOptions); this.sysRoleMenuOptionsService.saveBatch(sysRoleMenuOptions);
this.save(sysRoleMenu);
}else {
LambdaQueryWrapper<SysRoleMenu> roleMenuLambdaQueryWrapper = new LambdaQueryWrapper<>();
roleMenuLambdaQueryWrapper.eq(SysRoleMenu::getRoleId, sysRoleMenu.getRoleId());
roleMenuLambdaQueryWrapper.eq(SysRoleMenu::getMenuId, sysRoleMenu.getMenuId());
this.remove(roleMenuLambdaQueryWrapper);
} }
// 5. 根据菜单下的资源信息,封装返回结果
return PermissionAssignResultFactory.createRoleBindMenuResult(totalMenuOptions, roleBindPermissionRequest.getChecked());
} }
@Override @Override