【7.6.0】【sys】【permission】【角色绑定权限】完善对应用的选择处理

pull/55/MERGE
fengshuonan 2023-06-14 14:56:00 +08:00
parent 8cdc9850af
commit 93dbc1e8ee
2 changed files with 122 additions and 1 deletions

View File

@ -1,6 +1,8 @@
package cn.stylefeng.roses.kernel.sys.modular.role.factory;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenuOptions;
import cn.stylefeng.roses.kernel.sys.modular.role.enums.PermissionNodeTypeEnum;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionItem;
@ -40,4 +42,35 @@ public class PermissionAssignResultFactory {
return result;
}
/**
*
*
* @author fengshuonan
* @since 2023/6/14 14:53
*/
public static List<RoleBindPermissionItem> createRoleBindAppResult(List<SysMenu> totalMenus, List<SysMenuOptions> totalMenuOptions, Boolean checkedFlag) {
List<RoleBindPermissionItem> result = new ArrayList<>();
if (ObjectUtil.isEmpty(totalMenus)) {
return result;
}
for (SysMenu sysMenu : totalMenus) {
RoleBindPermissionItem roleBindPermissionItem = new RoleBindPermissionItem(
sysMenu.getMenuId(), null, sysMenu.getMenuName(),
PermissionNodeTypeEnum.MENU.getCode(), checkedFlag);
result.add(roleBindPermissionItem);
}
for (SysMenuOptions sysMenuOptions : totalMenuOptions) {
RoleBindPermissionItem roleBindPermissionItem = new RoleBindPermissionItem(
sysMenuOptions.getMenuOptionId(), sysMenuOptions.getMenuId(), sysMenuOptions.getOptionName(),
PermissionNodeTypeEnum.OPTIONS.getCode(), checkedFlag);
result.add(roleBindPermissionItem);
}
return new DefaultTreeBuildFactory<RoleBindPermissionItem>().doTreeBuild(result);
}
}

View File

@ -1,11 +1,26 @@
package cn.stylefeng.roses.kernel.sys.modular.role.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenu;
import cn.stylefeng.roses.kernel.sys.modular.menu.entity.SysMenuOptions;
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService;
import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService;
import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleAssignOperateAction;
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.enums.PermissionNodeTypeEnum;
import cn.stylefeng.roses.kernel.sys.modular.role.factory.PermissionAssignResultFactory;
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest;
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.SysRoleMenuService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
@ -15,6 +30,18 @@ import java.util.List;
*/
public class RoleBindAppImpl implements RoleAssignOperateAction {
@Resource
private SysMenuService sysMenuService;
@Resource
private SysMenuOptionsService sysMenuOptionsService;
@Resource
private SysRoleMenuService sysRoleMenuService;
@Resource
private SysRoleMenuOptionsService sysRoleMenuOptionsService;
@Override
public PermissionNodeTypeEnum getNodeType() {
return PermissionNodeTypeEnum.APP;
@ -22,7 +49,68 @@ public class RoleBindAppImpl implements RoleAssignOperateAction {
@Override
public List<RoleBindPermissionItem> doOperateAction(RoleBindPermissionRequest roleBindPermissionRequest) {
return null;
Long roleId = roleBindPermissionRequest.getRoleId();
Long appId = roleBindPermissionRequest.getNodeId();
// 找到所选应用的对应的所有菜单
LambdaQueryWrapper<SysMenu> menuLambdaQueryWrapper = new LambdaQueryWrapper<>();
menuLambdaQueryWrapper.eq(SysMenu::getAppId, appId);
menuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuName, SysMenu::getMenuParentId);
List<SysMenu> totalMenus = sysMenuService.list(menuLambdaQueryWrapper);
Set<Long> totalMenuIds = totalMenus.stream().map(SysMenu::getMenuId).collect(Collectors.toSet());
if (ObjectUtil.isEmpty(totalMenus)) {
return new ArrayList<>();
}
// 找到所选应用的对应的所有菜单功能
LambdaQueryWrapper<SysMenuOptions> menuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
menuOptionsLambdaQueryWrapper.eq(SysMenuOptions::getAppId, appId);
menuOptionsLambdaQueryWrapper.select(SysMenuOptions::getMenuOptionId, SysMenuOptions::getOptionName, SysMenuOptions::getMenuId);
List<SysMenuOptions> totalMenuOptions = sysMenuOptionsService.list(menuOptionsLambdaQueryWrapper);
Set<Long> totalMenuOptionIds = totalMenuOptions.stream().map(SysMenuOptions::getMenuOptionId).collect(Collectors.toSet());
// 先删除角色绑定的这些菜单
LambdaQueryWrapper<SysRoleMenu> sysRoleMenuLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysRoleMenuLambdaQueryWrapper.eq(SysRoleMenu::getRoleId, roleId);
sysRoleMenuLambdaQueryWrapper.in(SysRoleMenu::getMenuId, totalMenuIds);
sysRoleMenuService.remove(sysRoleMenuLambdaQueryWrapper);
// 删除角色绑定的这些菜单功能
if (ObjectUtil.isNotEmpty(totalMenuOptionIds)) {
LambdaQueryWrapper<SysRoleMenuOptions> sysRoleMenuOptionsLambdaQueryWrapper = new LambdaQueryWrapper<>();
sysRoleMenuOptionsLambdaQueryWrapper.eq(SysRoleMenuOptions::getRoleId, roleId);
sysRoleMenuOptionsLambdaQueryWrapper.in(SysRoleMenuOptions::getMenuOptionId, totalMenuOptionIds);
sysRoleMenuOptionsService.remove(sysRoleMenuOptionsLambdaQueryWrapper);
}
// 如果是选中了应用,则从新绑定这些菜单和功能
if (roleBindPermissionRequest.getChecked()) {
List<SysRoleMenu> sysRoleMenuList = new ArrayList<>();
for (SysMenu menuItem : totalMenus) {
SysRoleMenu sysRoleMenu = new SysRoleMenu();
sysRoleMenu.setRoleId(roleId);
sysRoleMenu.setAppId(appId);
sysRoleMenu.setMenuId(menuItem.getMenuId());
sysRoleMenuList.add(sysRoleMenu);
}
this.sysRoleMenuService.saveBatch(sysRoleMenuList);
List<SysRoleMenuOptions> sysRoleMenuOptionsList = new ArrayList<>();
for (SysMenuOptions menuOptionItem : totalMenuOptions) {
SysRoleMenuOptions sysRoleMenuOptions = new SysRoleMenuOptions();
sysRoleMenuOptions.setRoleId(roleId);
sysRoleMenuOptions.setAppId(appId);
sysRoleMenuOptions.setMenuId(menuOptionItem.getMenuId());
sysRoleMenuOptions.setMenuOptionId(menuOptionItem.getMenuOptionId());
sysRoleMenuOptionsList.add(sysRoleMenuOptions);
}
this.sysRoleMenuOptionsService.saveBatch(sysRoleMenuOptionsList);
}
// 组装返回结果
return PermissionAssignResultFactory.createRoleBindAppResult(totalMenus, totalMenuOptions, roleBindPermissionRequest.getChecked());
}
}