From b5af67d1fecc15d4495346a41ee320f427f29673 Mon Sep 17 00:00:00 2001 From: fengshuonan <sn93@qq.com> Date: Mon, 27 Jun 2022 18:36:28 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.2.3=E3=80=91=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=8E=88=E6=9D=83=E8=8F=9C=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=EF=BC=8C=E8=BF=94=E5=9B=9E=E6=8E=88=E6=9D=83=E5=90=8E?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../roses/kernel/system/api/MenuServiceApi.java | 11 +++++++++++ .../modular/menu/controller/SysMenuController.java | 6 +++++- .../system/modular/menu/service/SysMenuService.java | 9 --------- .../modular/menu/service/impl/SysMenuServiceImpl.java | 2 ++ .../modular/role/controller/SysRoleController.java | 6 +++--- .../system/modular/role/service/SysRoleService.java | 9 +++++++++ .../modular/role/service/impl/SysRoleServiceImpl.java | 11 +++++++++++ 7 files changed, 41 insertions(+), 13 deletions(-) diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java index ea48225b6..aafc12a60 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/MenuServiceApi.java @@ -25,6 +25,8 @@ package cn.stylefeng.roses.kernel.system.api; import cn.stylefeng.roses.kernel.system.api.pojo.login.v3.IndexMenuInfo; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; +import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; import java.util.List; import java.util.Set; @@ -90,4 +92,13 @@ public interface MenuServiceApi { */ List<IndexMenuInfo> buildAuthorities(Integer menuFrontType); + + /** + * 获取角色绑定菜单和按钮权限的树 + * + * @author fengshuonan + * @date 2021/8/10 22:23 + */ + List<MenuAndButtonTreeResponse> getRoleMenuAndButtons(SysRoleRequest sysRoleRequest); + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java index dbf0066fe..abb56cb58 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuController.java @@ -31,6 +31,7 @@ import cn.stylefeng.roses.kernel.rule.tree.ztree.ZTreeNode; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.system.api.MenuServiceApi; import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdMenuSelectTreeNode; @@ -59,6 +60,9 @@ public class SysMenuController { @Resource private SysMenuService sysMenuService; + @Resource + private MenuServiceApi menuServiceApi; + /** * 添加系统菜单 * @@ -196,7 +200,7 @@ public class SysMenuController { */ @GetResource(name = "新版角色分配菜单和按钮界面使用的接口(v2)", path = "/sysMenu/menuAndButtonTreeChildrenV2") public ResponseData<List<MenuAndButtonTreeResponse>> menuAndButtonTreeChildrenV2(SysRoleRequest sysRoleRequest) { - List<MenuAndButtonTreeResponse> treeResponseList = sysMenuService.getRoleMenuAndButtons(sysRoleRequest); + List<MenuAndButtonTreeResponse> treeResponseList = menuServiceApi.getRoleMenuAndButtons(sysRoleRequest); return new SuccessResponseData<>(treeResponseList); } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java index 7874ac344..7f20cdc72 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuService.java @@ -25,7 +25,6 @@ package cn.stylefeng.roses.kernel.system.modular.menu.service; import cn.stylefeng.roses.kernel.rule.tree.ztree.ZTreeNode; -import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest; import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdMenuSelectTreeNode; import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO; @@ -146,14 +145,6 @@ public interface SysMenuService extends IService<SysMenu> { */ List<LayuiMenuAndButtonTreeResponse> getMenuAndButtonTree(SysRoleRequest sysRoleRequest, Boolean lateralFlag); - /** - * 获取角色绑定菜单和按钮权限的树 - * - * @author fengshuonan - * @date 2021/8/10 22:23 - */ - List<MenuAndButtonTreeResponse> getRoleMenuAndButtons(SysRoleRequest sysRoleRequest); - /** * 获取当前用户的某个应用下的菜单 * diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java index 7acf0526b..b9fdf6b4a 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuServiceImpl.java @@ -71,6 +71,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; @@ -433,6 +434,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl } @Override + @Transactional(isolation = Isolation.READ_UNCOMMITTED) public List<MenuAndButtonTreeResponse> getRoleMenuAndButtons(SysRoleRequest sysRoleRequest) { List<MenuAndButtonTreeResponse> menuTreeNodeList = CollectionUtil.newArrayList(); diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java index 17fee595e..a2028e617 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleController.java @@ -33,6 +33,7 @@ import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRole; @@ -189,9 +190,8 @@ public class SysRoleController { * @date 2021/8/11 9:58 */ @PostResource(name = "角色绑定或取消绑定菜单和按钮", path = "/sysRole/grantMenusAndButtons") - public ResponseData<?> grantMenusAndButtons(@RequestBody @Validated(SysRoleRequest.grantMenusAndButtons.class) SysRoleRequest sysRoleRequest) { - sysRoleService.grantMenusAndButtons(sysRoleRequest); - return new SuccessResponseData<>(); + public ResponseData<List<MenuAndButtonTreeResponse>> grantMenusAndButtons(@RequestBody @Validated(SysRoleRequest.grantMenusAndButtons.class) SysRoleRequest sysRoleRequest) { + return new SuccessResponseData<>(sysRoleService.grantMenusAndButtonsAndGetResult(sysRoleRequest)); } /** diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleService.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleService.java index ad4fa2b17..b73f7e8a9 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleService.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleService.java @@ -27,6 +27,7 @@ package cn.stylefeng.roses.kernel.system.modular.role.service; import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.rule.pojo.dict.SimpleDict; import cn.stylefeng.roses.kernel.system.api.RoleServiceApi; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRole; @@ -158,4 +159,12 @@ public interface SysRoleService extends IService<SysRole>, RoleServiceApi { * @date 2022/6/21 9:55 */ void grantMenusAndButtons(SysRoleRequest sysRoleRequest); + + /** + * 授权菜单和按钮集合,并获取结果 + * + * @author fengshuonan + * @date 2022/6/27 17:08 + */ + List<MenuAndButtonTreeResponse> grantMenusAndButtonsAndGetResult(SysRoleRequest sysRoleRequest); } diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java index 69f10bcd2..c7f817d18 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleServiceImpl.java @@ -46,6 +46,7 @@ import cn.stylefeng.roses.kernel.system.api.UserServiceApi; import cn.stylefeng.roses.kernel.system.api.constants.SystemConstants; import cn.stylefeng.roses.kernel.system.api.exception.SystemModularException; import cn.stylefeng.roses.kernel.system.api.exception.enums.role.SysRoleExceptionEnum; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.MenuAndButtonTreeResponse; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleMenuButtonDTO; import cn.stylefeng.roses.kernel.system.api.pojo.role.dto.SysRoleMenuDTO; @@ -426,6 +427,10 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl // 如果是新增绑定菜单 if (selectBindFlag) { + // 获取所有菜单的父级节点,把选中状态的菜单的所有父级节点都选择上 + Set<Long> allParentMenuId = menuServiceApi.getMenuAllParentMenuId(new HashSet<>(grantMenuIdList)); + grantMenuIdList.addAll(allParentMenuId); + // 批量保存绑定的菜单集合 List<SysRoleMenu> sysRoleMenus = new ArrayList<>(); for (Long menuId : grantMenuIdList) { @@ -449,6 +454,12 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl } } + @Override + public List<MenuAndButtonTreeResponse> grantMenusAndButtonsAndGetResult(SysRoleRequest sysRoleRequest) { + this.grantMenusAndButtons(sysRoleRequest); + return menuServiceApi.getRoleMenuAndButtons(sysRoleRequest); + } + @Override public List<SysRoleDTO> getRolesByIds(List<Long> roleIds) { ArrayList<SysRoleDTO> sysRoleResponses = new ArrayList<>();