|
@@ -1,6 +1,7 @@
|
|
|
package com.lantone.security.facade;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.lantone.common.dto.MenuDTO;
|
|
|
import com.lantone.common.exception.Asserts;
|
|
|
import com.lantone.common.util.DateUtil;
|
|
@@ -23,6 +24,7 @@ import org.springframework.stereotype.Component;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @ClassName: FuncManagementFacade
|
|
@@ -75,7 +77,7 @@ public class FuncManagementFacade {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param roleServiceMenuVo
|
|
|
+ * @param roleSoftwareMenuVo
|
|
|
* @Method inputParamCheck
|
|
|
* @Author songxl
|
|
|
* @Version 1.0
|
|
@@ -83,14 +85,14 @@ public class FuncManagementFacade {
|
|
|
* @Return void
|
|
|
* @Date 2021/7/28
|
|
|
*/
|
|
|
- private void inputParamCheck(RoleSoftwareMenuVo roleServiceMenuVo) {
|
|
|
- if (roleServiceMenuVo == null) {
|
|
|
+ private void inputParamCheck(RoleSoftwareMenuVo roleSoftwareMenuVo) {
|
|
|
+ if (roleSoftwareMenuVo == null) {
|
|
|
Asserts.fail("入参为空");
|
|
|
}
|
|
|
- if (ListUtil.isEmpty(roleServiceMenuVo.getRoles())) {
|
|
|
+ if (ListUtil.isEmpty(roleSoftwareMenuVo.getRoles())) {
|
|
|
Asserts.fail("角色列表为空");
|
|
|
}
|
|
|
- if (roleServiceMenuVo.getSoftwareId() == null) {
|
|
|
+ if (roleSoftwareMenuVo.getSoftwareId() == null) {
|
|
|
Asserts.fail("服务id为空");
|
|
|
}
|
|
|
}
|
|
@@ -119,7 +121,7 @@ public class FuncManagementFacade {
|
|
|
if (menuVO.getParentId() == null) {
|
|
|
Asserts.fail("功能菜单父级ID为空");
|
|
|
}
|
|
|
- if (ListUtil.isEmpty(menuVO.getServices())) {
|
|
|
+ if (ListUtil.isEmpty(menuVO.getSoftwares())) {
|
|
|
Asserts.fail("功能菜单所属服务ID列表为空");
|
|
|
}
|
|
|
if (menuVO.getType() == null) {
|
|
@@ -136,17 +138,27 @@ public class FuncManagementFacade {
|
|
|
if (menuVO.getParentId() == null) {
|
|
|
Asserts.fail("功能菜单父级ID为空");
|
|
|
}
|
|
|
- if (ListUtil.isEmpty(menuVO.getServices())) {
|
|
|
+ if (ListUtil.isEmpty(menuVO.getSoftwares())) {
|
|
|
Asserts.fail("功能菜单所属服务ID列表为空");
|
|
|
}
|
|
|
if (menuVO.getType() == null) {
|
|
|
Asserts.fail("功能菜单类型为空");
|
|
|
}
|
|
|
break;
|
|
|
- default:
|
|
|
+ case 3:
|
|
|
+ if (menuVO.getId() == null) {
|
|
|
+ Asserts.fail("功能菜单ID为空");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
if (menuVO.getId() == null) {
|
|
|
Asserts.fail("功能菜单ID为空");
|
|
|
}
|
|
|
+ if (menuVO.getStatus() == null) {
|
|
|
+ Asserts.fail("status为空");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ default:
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -181,22 +193,20 @@ public class FuncManagementFacade {
|
|
|
* @Date 2021/7/28
|
|
|
*/
|
|
|
private Boolean addMenu(MenuVO menuVO) {
|
|
|
- //1.入参校验
|
|
|
- inputParamCheck(menuVO);
|
|
|
- //2.插入sys_menu
|
|
|
- //2.1插入sys_menu
|
|
|
+ //1.插入sys_menu
|
|
|
+ //1.1插入sys_menu
|
|
|
Menu menu = new Menu();
|
|
|
BeanUtils.copyProperties(menuVO, menu);
|
|
|
menu.setGmtCreate(DateUtil.now());
|
|
|
if (menuFacade.save(menu)) {
|
|
|
- //2.2插入成功获取 menuID
|
|
|
+ //1.2插入成功获取 menuID
|
|
|
Long menuID = menuFacade.list(new QueryWrapper<Menu>()
|
|
|
.eq("parent_id", menuVO.getParentId())
|
|
|
.eq("name", menuVO.getName())
|
|
|
.eq("type", menuVO.getType())
|
|
|
.eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
|
|
|
//插入sys_resource、sys_menu_resource
|
|
|
- return saveMenuResource(menuVO,menuID);
|
|
|
+ return saveMenuResource(menuVO, menuID);
|
|
|
} else {
|
|
|
Asserts.fail("菜单详情插入失败");
|
|
|
}
|
|
@@ -212,35 +222,36 @@ public class FuncManagementFacade {
|
|
|
* @Return void
|
|
|
* @Date 2021/7/28
|
|
|
*/
|
|
|
- private boolean saveMenuResource(MenuVO menuVO,Long menuID) {
|
|
|
- menuVO.getServices().stream().forEach(serviceId -> {
|
|
|
- //2.3 判断该功能菜单是否有对应权限
|
|
|
- if (ListUtil.isNotEmpty(menuVO.getPermissions())) {
|
|
|
- menuVO.getPermissions().stream().forEach(permission -> {
|
|
|
- //2.4 有权限 则插入sys_resource
|
|
|
- Resource resource = new Resource();
|
|
|
- resource.setUrl(permission);
|
|
|
- resource.setGmtCreate(DateUtil.now());
|
|
|
- if (resourceFacade.save(resource)) {
|
|
|
- //2.5 插入成功获取对应的 resourceID
|
|
|
- Long resourceID = resourceFacade.list(new QueryWrapper<Resource>()
|
|
|
- .eq("url", resource.getUrl())
|
|
|
- .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
|
|
|
- //2.6 插入菜单和功能对应关系
|
|
|
- MenuResource menuResource = new MenuResource();
|
|
|
- menuResource.setMenuId(menuID);
|
|
|
- menuResource.setResourceId(resourceID);
|
|
|
- if (menuResourceFacade.save(menuResource)) {
|
|
|
- } else {
|
|
|
- Asserts.fail("菜单与资源权限插入失败");
|
|
|
- }
|
|
|
+ private boolean saveMenuResource(MenuVO menuVO, Long menuID) {
|
|
|
+ //2.3 判断该功能菜单是否有对应权限
|
|
|
+ if (ListUtil.isNotEmpty(menuVO.getPermissions())) {
|
|
|
+ menuVO.getPermissions().stream().forEach(permission -> {
|
|
|
+ //2.4 有权限 则插入sys_resource
|
|
|
+ Resource resource = new Resource();
|
|
|
+ resource.setUrl(permission);
|
|
|
+ resource.setGmtCreate(DateUtil.now());
|
|
|
+ if (resourceFacade.save(resource)) {
|
|
|
+ //2.5 插入成功获取对应的 resourceID
|
|
|
+ Long resourceID = resourceFacade.list(new QueryWrapper<Resource>()
|
|
|
+ .select("id")
|
|
|
+ .eq("url", resource.getUrl())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
|
|
|
+ //2.6 插入菜单和功能对应关系
|
|
|
+ MenuResource menuResource = new MenuResource();
|
|
|
+ menuResource.setMenuId(menuID);
|
|
|
+ menuResource.setResourceId(resourceID);
|
|
|
+ if (menuResourceFacade.save(menuResource)) {
|
|
|
} else {
|
|
|
- Asserts.fail("资源权限插入失败");
|
|
|
+ Asserts.fail("菜单与资源权限插入失败");
|
|
|
}
|
|
|
- });
|
|
|
- }
|
|
|
- //3.插入超级管理员对应系统 sys_service_menu和sys_role_service_menu
|
|
|
- savaRoleServiceMenu(menuID, serviceId, 1l);
|
|
|
+ } else {
|
|
|
+ Asserts.fail("资源权限插入失败");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ menuVO.getSoftwares().stream().forEach(softwareId -> {
|
|
|
+ //3.插入超级管理员对应系统 sys_software_menu和sys_role_software_menu
|
|
|
+ savaRoleSoftwareMenu(menuID, softwareId, 1l);
|
|
|
});
|
|
|
return true;
|
|
|
}
|
|
@@ -249,26 +260,26 @@ public class FuncManagementFacade {
|
|
|
* @param menuID
|
|
|
* @param softwareId
|
|
|
* @param roleID
|
|
|
- * @Method savaRoleServiceMenu
|
|
|
+ * @Method savaRoleSoftwareMenu
|
|
|
* @Author songxl
|
|
|
* @Version 1.0
|
|
|
- * @Description插入超级管理员对应系统 sys_service_menu和sys_role_service_menu
|
|
|
+ * @Description插入超级管理员对应系统 sys_software_menu和sys_role_software_menu
|
|
|
* @Return void
|
|
|
* @Date 2021/7/28
|
|
|
*/
|
|
|
- private void savaRoleServiceMenu(Long menuID, Long softwareId, Long roleID) {
|
|
|
- SoftwareMenu serviceMenu = new SoftwareMenu();
|
|
|
- serviceMenu.setMenuId(menuID);
|
|
|
- serviceMenu.setSoftwareId(softwareId);
|
|
|
- if (softwareMenuFacade.save(serviceMenu)) {
|
|
|
- Long serviceMenuId = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
|
|
|
- .eq("software_id", serviceMenu.getSoftwareId())
|
|
|
- .eq("menu_id", serviceMenu.getMenuId())
|
|
|
+ private void savaRoleSoftwareMenu(Long menuID, Long softwareId, Long roleID) {
|
|
|
+ SoftwareMenu softwareMenu = new SoftwareMenu();
|
|
|
+ softwareMenu.setMenuId(menuID);
|
|
|
+ softwareMenu.setSoftwareId(softwareId);
|
|
|
+ if (softwareMenuFacade.save(softwareMenu)) {
|
|
|
+ Long softwareMenuId = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
|
|
|
+ .eq("software_id", softwareMenu.getSoftwareId())
|
|
|
+ .eq("menu_id", softwareMenu.getMenuId())
|
|
|
.eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
|
|
|
- RoleSoftwareMenu roleServiceMenu = new RoleSoftwareMenu();
|
|
|
- roleServiceMenu.setRoleId(roleID);
|
|
|
- roleServiceMenu.setSoftwareMenuId(serviceMenuId);
|
|
|
- if (roleSoftwareMenuFacade.save(roleServiceMenu)) {
|
|
|
+ RoleSoftwareMenu roleSoftwareMenu = new RoleSoftwareMenu();
|
|
|
+ roleSoftwareMenu.setRoleId(roleID);
|
|
|
+ roleSoftwareMenu.setSoftwareMenuId(softwareMenuId);
|
|
|
+ if (roleSoftwareMenuFacade.save(roleSoftwareMenu)) {
|
|
|
|
|
|
} else {
|
|
|
Asserts.fail("角色与服务菜单关系插入失败");
|
|
@@ -321,8 +332,10 @@ public class FuncManagementFacade {
|
|
|
* @Date 2021/7/28
|
|
|
*/
|
|
|
private Boolean disableDataAuth(MenuVO menuVO) {
|
|
|
-
|
|
|
- return false;
|
|
|
+ return menuFacade.update(new UpdateWrapper<Menu>()
|
|
|
+ .set("status",menuVO.getStatus())
|
|
|
+ .eq("id",menuVO.getId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -335,7 +348,14 @@ public class FuncManagementFacade {
|
|
|
* @Date 2021/7/28
|
|
|
*/
|
|
|
private Boolean deleteDataAuth(MenuVO menuVO) {
|
|
|
-
|
|
|
+ //1.删除原来menu关联插入的数据
|
|
|
+ if(menuFacade.remove(new UpdateWrapper<Menu>()
|
|
|
+ .eq("id",menuVO.getId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()))){
|
|
|
+ return deleteMenuJoinDate(menuVO, 1l);
|
|
|
+ }else {
|
|
|
+ Asserts.fail("菜单详情删除失败");
|
|
|
+ }
|
|
|
return false;
|
|
|
}
|
|
|
|
|
@@ -349,7 +369,94 @@ public class FuncManagementFacade {
|
|
|
* @Date 2021/7/28
|
|
|
*/
|
|
|
private Boolean updateDataAuth(MenuVO menuVO) {
|
|
|
+ //1.删除原来menu关联插入的数据
|
|
|
+ if(deleteMenuJoinDate(menuVO, 1l)){
|
|
|
+ //2.修改sys_menu 菜单表
|
|
|
+ Menu menu = new Menu();
|
|
|
+ BeanUtils.copyProperties(menuVO, menu);
|
|
|
+ if( menuFacade.update(new UpdateWrapper<Menu>()
|
|
|
+ .set("name",menu.getName())
|
|
|
+ .set("type",menu.getType())
|
|
|
+ .set("url",menu.getUrl())
|
|
|
+ .set("order_no",menu.getOrderNo())
|
|
|
+ .set("menu_describe",menu.getMenuDescribe())
|
|
|
+ .set("remark",menu.getRemark())
|
|
|
+ .set("status",menu.getStatus())
|
|
|
+ .eq("id", menu.getId()))){
|
|
|
+ //3.重新插入上面删除的数据
|
|
|
+ return saveMenuResource(menuVO,menuVO.getId());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @Method deleteMenuJoinDate
|
|
|
+ * @Author songxl
|
|
|
+ * @Version 1.0
|
|
|
+ * @Description清除原菜单关联的数据
|
|
|
+ * @param menuVO
|
|
|
+ * @param roleId
|
|
|
+ * @Return boolean
|
|
|
+ * @Date 2021/7/29
|
|
|
+ */
|
|
|
+ private boolean deleteMenuJoinDate(MenuVO menuVO, Long roleId) {
|
|
|
|
|
|
+ //2.1删除sys_resource、sys_menu_resource原先对应menu的资源权限
|
|
|
+ List<MenuResource> menuResources = menuResourceFacade.list(new QueryWrapper<MenuResource>()
|
|
|
+ .eq("menu_id", menuVO.getId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()));
|
|
|
+ //2.1有对应的资源权限
|
|
|
+ if (ListUtil.isNotEmpty(menuResources) && menuResources.get(0).getResourceId() != null) {
|
|
|
+ if (menuResourceFacade.remove(new UpdateWrapper<MenuResource>()
|
|
|
+ .eq("id", menuResources.get(0).getId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
|
|
|
+ if (resourceFacade.remove(new UpdateWrapper<Resource>()
|
|
|
+ .eq("id", menuResources.get(0).getResourceId())
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
|
|
|
+ } else {
|
|
|
+ Asserts.fail("原菜单对应资源详情删除失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ Asserts.fail("原菜单对应资源关联关系删除失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //2.2删除超级管理员该菜单的管理sys_software_menu、sys_role_software_menu
|
|
|
+ List<Long> softwareMenuIds = roleSoftwareMenuFacade.list(new QueryWrapper<RoleSoftwareMenu>()
|
|
|
+ .eq("role_id", roleId)
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().map(RoleSoftwareMenu::getSoftwareMenuId).collect(Collectors.toList());
|
|
|
+ List<SoftwareMenu> softwareMenus = softwareMenuFacade.getBaseMapper().getSoftwareMenu(menuVO.getId(), softwareMenuIds);
|
|
|
+ //如果改菜单没有超级管理员对应关系
|
|
|
+ if(ListUtil.isEmpty(softwareMenus)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ //有删除
|
|
|
+ if (roleSoftwareMenuFacade.remove(new UpdateWrapper<RoleSoftwareMenu>()
|
|
|
+ .in("software_menu_id", softwareMenus.stream().map(SoftwareMenu::getId).collect(Collectors.toList()))
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
|
|
|
+ if (softwareMenuFacade.remove(new UpdateWrapper<SoftwareMenu>()
|
|
|
+ .in("id", softwareMenus.stream().map(SoftwareMenu::getId).collect(Collectors.toList()))
|
|
|
+ .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
|
|
|
+ return true;
|
|
|
+ }else {
|
|
|
+ Asserts.fail("服务菜单关系清除失败");
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ Asserts.fail("角色对应服务菜单关系清除失败");
|
|
|
+ }
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @Method getMenuById
|
|
|
+ * @Author songxl
|
|
|
+ * @Version 1.0
|
|
|
+ * @Description获取菜单详情
|
|
|
+ * @param menuVO
|
|
|
+ * @Return com.lantone.common.dto.MenuDTO
|
|
|
+ * @Date 2021/7/29
|
|
|
+ */
|
|
|
+ public MenuDTO getMenuById(MenuVO menuVO) {
|
|
|
+ return menuFacade.getBaseMapper().getMenuById(menuVO);
|
|
|
+ }
|
|
|
}
|