From 6bb4b0b4077a0c00b03988433e806e9959a7b03b Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Wed, 11 Aug 2021 11:21:18 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=907.1.1=E3=80=91=E3=80=90role=E3=80=91?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=A7=92=E8=89=B2=E7=BB=91=E5=AE=9A=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=92=8C=E6=8C=89=E9=92=AE=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kernel/system/api/MenuServiceApi.java | 8 +++ .../api/pojo/role/request/SysRoleRequest.java | 40 +++++++++++++- .../menu/service/impl/SysMenuServiceImpl.java | 10 ++++ .../role/controller/SysRoleController.java | 26 +++++++++- .../modular/role/service/SysRoleService.java | 18 ++++++- .../role/service/impl/SysRoleServiceImpl.java | 52 +++++++++++++++++++ 6 files changed, 151 insertions(+), 3 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 48ef971ee..6e031fc0d 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 @@ -63,4 +63,12 @@ public interface MenuServiceApi { **/ Set getMenuAllParentMenuId(Set menuIds); + /** + * 通过按钮id获取按钮code + * + * @author fengshuonan + * @date 2021/8/11 10:40 + */ + String getMenuButtonCodeByButtonId(Long buttonId); + } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java index eef112cf7..8eea1539b 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/role/request/SysRoleRequest.java @@ -49,7 +49,8 @@ public class SysRoleRequest extends BaseRequest { /** * 主键 */ - @NotNull(message = "roleId不能为空", groups = {edit.class, delete.class, detail.class, updateStatus.class, grantResource.class, grantResourceV2.class, grantDataScope.class, grantMenuButton.class}) + @NotNull(message = "roleId不能为空", groups = {edit.class, delete.class, detail.class, updateStatus.class, grantResource.class, + grantResourceV2.class, grantDataScope.class, grantMenuButton.class, grantMenu.class, grantButton.class}) @ChineseDescription("主键") private Long roleId; @@ -152,6 +153,28 @@ public class SysRoleRequest extends BaseRequest { @ChineseDescription("授权菜单按钮") private List grantMenuButtonIdList; + /** + * 是否是新增绑定菜单,true-新增绑定菜单,false-取消绑定菜单 + */ + @NotNull(message = "是否是新增绑定菜单", groups = {grantMenu.class}) + private Boolean grantAddMenuFlag; + + /** + * 绑定菜单的id + */ + @NotNull(message = "绑定菜单的id", groups = {grantMenu.class}) + private Long grantMenuId; + + /** + * 模块下所有的按钮id + */ + private List modularButtonIds; + + /** + * 模块下选中的按钮id + */ + private List selectedButtonIds; + /** * 参数校验分组:授权菜单和按钮 */ @@ -159,6 +182,20 @@ public class SysRoleRequest extends BaseRequest { } + /** + * 参数校验分组:角色授权菜单 + */ + public @interface grantMenu { + + } + + /** + * 参数校验分组:角色授权按钮 + */ + public @interface grantButton { + + } + /** * 参数校验分组:授权资源 */ @@ -177,6 +214,7 @@ public class SysRoleRequest extends BaseRequest { * 参数校验分组:授权数据 */ public @interface grantDataScope { + } } 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 95606424e..4a01e0707 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 @@ -538,6 +538,16 @@ public class SysMenuServiceImpl extends ServiceImpl impl return parentMenuIds; } + @Override + public String getMenuButtonCodeByButtonId(Long buttonId) { + SysMenuButton sysMenuButton = this.sysMenuButtonService.getById(buttonId); + if (sysMenuButton != null) { + return sysMenuButton.getButtonCode(); + } else { + return ""; + } + } + /** * 获取系统菜单 * 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 59fd3460a..b9c81df85 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 @@ -146,12 +146,36 @@ public class SysRoleController { * @author majianguo * @date 2021/1/9 18:04 */ - @PostResource(name = "授权资源", path = "/sysRole/grantMenuAndButton") + @PostResource(name = "角色授权菜单和按钮", path = "/sysRole/grantMenuAndButton") public ResponseData grantMenuAndButton(@RequestBody @Validated(SysRoleRequest.grantMenuButton.class) SysRoleRequest sysRoleRequest) { sysRoleService.grantMenuAndButton(sysRoleRequest); return new SuccessResponseData(); } + /** + * 角色授权菜单,新版界面用 + * + * @author fengshuonan + * @date 2021/8/11 9:58 + */ + @PostResource(name = "角色授权菜单", path = "/sysRole/grantMenu") + public ResponseData grantMenu(@RequestBody @Validated(SysRoleRequest.grantMenu.class) SysRoleRequest sysRoleRequest) { + sysRoleService.grantMenu(sysRoleRequest); + return new SuccessResponseData(); + } + + /** + * 角色授权按钮,新版界面用 + * + * @author fengshuonan + * @date 2021/8/11 9:58 + */ + @PostResource(name = "角色授权按钮", path = "/sysRole/grantButton") + public ResponseData grantButton(@RequestBody @Validated(SysRoleRequest.grantButton.class) SysRoleRequest sysRoleRequest) { + sysRoleService.grantButton(sysRoleRequest); + return new SuccessResponseData(); + } + /** * 设置角色绑定的数据范围类型和数据范围 * 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 c581823c8..e58f27bc8 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,9 +27,9 @@ 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.modular.role.entity.SysRole; 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; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; @@ -107,6 +107,22 @@ public interface SysRoleService extends IService, RoleServiceApi { */ void grantMenuAndButton(SysRoleRequest sysRoleMenuButtonRequest); + /** + * 角色绑定菜单,新界面用 + * + * @author fengshuonan + * @date 2021/8/11 10:02 + */ + void grantMenu(SysRoleRequest sysRoleMenuButtonRequest); + + /** + * 角色绑定按钮,新界面用 + * + * @author fengshuonan + * @date 2021/8/11 10:02 + */ + void grantButton(SysRoleRequest sysRoleMenuButtonRequest); + /** * 授权数据范围(组织机构) * 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 c010844e1..18712e3ae 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 @@ -57,6 +57,7 @@ import cn.stylefeng.roses.kernel.system.modular.role.entity.*; import cn.stylefeng.roses.kernel.system.modular.role.mapper.SysRoleMapper; import cn.stylefeng.roses.kernel.system.modular.role.service.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -284,6 +285,57 @@ public class SysRoleServiceImpl extends ServiceImpl impl } } + @Override + public void grantMenu(SysRoleRequest sysRoleMenuButtonRequest) { + + // 获取新增还是取消绑定 + Boolean grantAddMenuFlag = sysRoleMenuButtonRequest.getGrantAddMenuFlag(); + + // 如果是新增绑定菜单 + if (grantAddMenuFlag) { + SysRoleMenu item = new SysRoleMenu(); + item.setRoleId(sysRoleMenuButtonRequest.getRoleId()); + item.setMenuId(sysRoleMenuButtonRequest.getGrantMenuId()); + this.roleMenuService.save(item); + } else { + //如果是解除绑定菜单 + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.eq(SysRoleMenu::getRoleId, sysRoleMenuButtonRequest.getRoleId()); + wrapper.eq(SysRoleMenu::getMenuId, sysRoleMenuButtonRequest.getGrantMenuId()); + this.roleMenuService.remove(wrapper); + } + } + + @Override + public void grantButton(SysRoleRequest sysRoleMenuButtonRequest) { + // 该模块下角色绑定的按钮全部删除 + List modularButtonIds = sysRoleMenuButtonRequest.getModularButtonIds(); + if (ObjectUtil.isNotEmpty(modularButtonIds)) { + LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>(); + wrapper.in(SysRoleMenuButton::getButtonId, modularButtonIds); + wrapper.eq(SysRoleMenuButton::getRoleId, sysRoleMenuButtonRequest.getRoleId()); + this.sysRoleMenuButtonService.remove(wrapper); + } + + // 该模块下,勾选的按钮,添加到角色绑定 + List selectedButtonIds = sysRoleMenuButtonRequest.getSelectedButtonIds(); + if (ObjectUtil.isNotEmpty(selectedButtonIds)) { + ArrayList sysRoleMenuButtons = new ArrayList<>(); + for (Long selectButtonId : selectedButtonIds) { + SysRoleMenuButton sysRoleMenuButton = new SysRoleMenuButton(); + sysRoleMenuButton.setRoleId(sysRoleMenuButtonRequest.getRoleId()); + sysRoleMenuButton.setButtonId(selectButtonId); + + // 通过buttonId获取buttonCode + String buttonCode = this.menuServiceApi.getMenuButtonCodeByButtonId(selectButtonId); + sysRoleMenuButton.setButtonCode(buttonCode); + + sysRoleMenuButtons.add(sysRoleMenuButton); + } + this.sysRoleMenuButtonService.saveBatch(sysRoleMenuButtons, sysRoleMenuButtons.size()); + } + } + @Override @Transactional(rollbackFor = Exception.class) public void grantDataScope(SysRoleRequest sysRoleRequest) {