From ec1467768497875e799d946e7d64ec198ff9ee95 Mon Sep 17 00:00:00 2001 From: Parker Date: Thu, 16 Mar 2023 20:58:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=8F=9C=E5=8D=95=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E9=A1=B5=20=E8=8E=B7=E5=8F=96=E7=88=B6=E7=BA=A7=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=20=E4=B8=BA=E7=A9=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../opsli/api/web/system/menu/MenuApi.java | 8 +++ .../api/web/system/role/RoleMenuRefApi.java | 20 +++++++ .../wrapper/system/user/UserRoleRefModel.java | 6 +-- .../system/menu/web/MenuRestController.java | 23 ++++++++ .../role/service/IRoleMenuRefService.java | 8 +++ .../service/impl/RoleMenuRefServiceImpl.java | 32 +++++++++++ .../role/web/RoleMenuRefRestController.java | 54 +++++++++++++++++++ 7 files changed, 148 insertions(+), 3 deletions(-) diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java index bc3af3ca..6c179a7d 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/menu/MenuApi.java @@ -100,6 +100,14 @@ public interface MenuApi { ResultWrapper> findList(); + /** + * 菜单 查一条 + * @param parentId 父级ID + * @return ResultWrapper + */ + @GetMapping("/getParent") + ResultWrapper getParent(String parentId); + /** * 菜单 查一条 * @param model 模型 diff --git a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java index 922be080..3668b5b5 100644 --- a/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java +++ b/opsli-api/src/main/java/org/opsli/api/web/system/role/RoleMenuRefApi.java @@ -18,6 +18,7 @@ package org.opsli.api.web.system.role; import org.opsli.api.base.result.ResultWrapper; import org.opsli.api.wrapper.system.role.RoleMenuRefModel; import org.opsli.api.wrapper.system.role.RoleModel; +import org.opsli.common.annotation.ApiVersion; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -54,6 +55,15 @@ public interface RoleMenuRefApi { @GetMapping("/getPerms") ResultWrapper getPerms(RoleMenuRefModel model); + /** + * 获得当前已有权限 + * @param model 角色Id + * @return ResultWrapper + */ + @ApiVersion(2) + @GetMapping("/getPerms") + ResultWrapper getPermsV2(RoleMenuRefModel model); + /** * 设置权限 * @param model roleId 角色Id @@ -63,4 +73,14 @@ public interface RoleMenuRefApi { @PostMapping("/setPerms") ResultWrapper setPerms(@RequestBody RoleMenuRefModel model); + /** + * 设置权限 + * @param model roleId 角色Id + * @param model permsIds 权限Id 数组 + * @return ResultWrapper + */ + @PostMapping("/setPerms") + @ApiVersion(2) + ResultWrapper setPermsV2(@RequestBody RoleMenuRefModel model); + } diff --git a/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java b/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java index 941bb414..854d1f73 100644 --- a/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java +++ b/opsli-api/src/main/java/org/opsli/api/wrapper/system/user/UserRoleRefModel.java @@ -17,9 +17,7 @@ package org.opsli.api.wrapper.system.user; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import io.swagger.annotations.ApiModelProperty; -import lombok.Builder; -import lombok.Data; -import lombok.EqualsAndHashCode; +import lombok.*; import org.opsli.common.annotation.validator.Validator; import org.opsli.common.annotation.validator.ValidatorLenMax; import org.opsli.common.enums.ValidatorType; @@ -35,6 +33,8 @@ import java.io.Serializable; @Data @EqualsAndHashCode(callSuper = false) @ExcelIgnoreUnannotated +@AllArgsConstructor +@NoArgsConstructor @Builder public class UserRoleRefModel implements Serializable { diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java index 78829ca7..464418c3 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/menu/web/MenuRestController.java @@ -287,6 +287,29 @@ public class MenuRestController extends BaseRestController getParent(String parentId) { + if(StringUtils.isBlank(parentId)){ + return ResultWrapper.getSuccessResultWrapper(null); + } + MenuModel model; + if(StringUtils.equals(MenuConstants.GEN_ID, parentId)){ + // 生成根节点菜单 + model = getGenMenuModel(); + }else{ + model = IService.get(parentId); + } + + return ResultWrapper.getSuccessResultWrapper(model); + } + /** * 菜单 查询分页 * @param pageNo 当前页 diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java index f922901d..8f3450c7 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/IRoleMenuRefService.java @@ -42,6 +42,14 @@ public interface IRoleMenuRefService { */ boolean setPerms(String roleId,String[] permsIds); + /** + * 保存权限(兼容Vue3) + * @param roleId 角色ID + * @param permsIds 权限集合 + * @return boolean + */ + boolean setPermsV2(String roleId,String[] permsIds); + /** * 根据角色ID 移除对应 权限数据 * @param roleIds 角色ID diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java index dc8fc0a3..d7509ad3 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/service/impl/RoleMenuRefServiceImpl.java @@ -88,6 +88,38 @@ public class RoleMenuRefServiceImpl extends ServiceImpl list = Lists.newArrayListWithCapacity(permsIds.length); + for (String permsId : permsIds) { + SysRoleMenuRef entity = new SysRoleMenuRef(); + entity.setRoleId(roleId); + entity.setMenuId(permsId); + list.add(entity); + } + boolean ret = super.saveBatch(list); + if(ret){ + // 清除缓存 + this.clearCache(roleId); + } + return ret; + } + + @Override @Transactional(rollbackFor = Exception.class) public boolean delPermsByMenuIds(List menuIds){ diff --git a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java index 040b1a58..893a9a1d 100644 --- a/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java +++ b/opsli-modulars/opsli-modulars-system/src/main/java/org/opsli/modulars/system/role/web/RoleMenuRefRestController.java @@ -19,6 +19,7 @@ import com.google.common.collect.Lists; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.opsli.common.annotation.ApiVersion; import org.opsli.core.log.annotation.OperateLogger; import org.opsli.core.log.enums.ModuleEnum; import org.opsli.core.log.enums.OperationTypeEnum; @@ -37,6 +38,7 @@ import org.opsli.modulars.system.SystemMsg; import org.opsli.modulars.system.menu.entity.SysMenu; import org.opsli.modulars.system.role.service.IRoleMenuRefService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import java.util.List; import java.util.Map; @@ -93,6 +95,31 @@ public class RoleMenuRefRestController implements RoleMenuRefApi { return ResultWrapper.getSuccessResultWrapper(permsIds); } + /** + * 获得当前已有权限 (针对Vue3 兼容) + * @param model roleId 角色Id + * @return ResultWrapper + */ + @PreAuthorize("hasAuthority('system_role_setMenuPerms')") + @Override + @ApiVersion(2) + public ResultWrapper getPermsV2(RoleMenuRefModel model) { + if(model == null){ + return ResultWrapper.getCustomResultWrapper(SystemMsg.EXCEPTION_ROLE_ID_NOT_NULL); + } + + List perms = iRoleMenuRefService.getPerms(model.getRoleId()); + List permsIds = Lists.newArrayListWithCapacity(perms.size()); + if(!perms.isEmpty()){ + for (SysMenu perm : perms) { + permsIds.add(perm.getId()); + } + } + + return ResultWrapper.getSuccessResultWrapper(permsIds); + } + + /** * 设置菜單权限 * @param model 模型 @@ -120,6 +147,33 @@ public class RoleMenuRefRestController implements RoleMenuRefApi { } + /** + * 设置菜單权限 + * @param model 模型 + * @return ResultWrapper + */ + @PreAuthorize("hasAuthority('system_role_setMenuPerms')") + @OperateLogger(description = "设置菜單权限", + module = ModuleEnum.MODULE_ROLE, operationType = OperationTypeEnum.UPDATE, db = true) + @Override + public ResultWrapper setPermsV2(RoleMenuRefModel model) { + // 演示模式 不允许操作 + this.demoError(); + + if(model == null){ + return ResultWrapper.getErrorResultWrapper().setMsg("设置权限失败"); + } + + boolean ret = iRoleMenuRefService.setPermsV2(model.getRoleId(), + model.getPermsIds()); + if(ret){ + return ResultWrapper.getSuccessResultWrapper(); + } + // 权限设置失败 + return ResultWrapper.getCustomResultWrapper(SystemMsg.EXCEPTION_ROLE_PERMS_ERROR); + } + + /** * 演示模式 */