Procházet zdrojové kódy

feat(role): 添加编辑角色菜单权限功能

- 新增 editRoleMenuMapParam 参数类用于接收角色菜单映射数据
- 在 WebGateway 接口中增加 editRoleMenuMap 方法定义
- 在 WebGatewayImpl 实现类中实现角色菜单权限的增删逻辑
- 在 WebRoleController 控制器中添加编辑角色菜单权限的接口
- 使用事务管理确保角色菜单映射操作的一致性- 增加角色存在性校验和菜单ID集合空值判断
- 引入 CollUtil 和 Wrappers 工具类优化集合操作与查询条件构建
hxd před 2 dny
rodič
revize
42e2ee1455

+ 9 - 0
portal-service-application/src/main/java/com/hfln/portal/application/controller/web/WebRoleController.java

@@ -6,6 +6,7 @@ import cn.hfln.framework.dto.ApiResult;
 import com.hfln.portal.common.dto.data.role.RoleListDTO;
 import com.hfln.portal.common.request.web.AddRoleParam;
 import com.hfln.portal.common.request.web.QueryRoleParam;
+import com.hfln.portal.common.request.web.editRoleMenuMapParam;
 import com.hfln.portal.domain.gateway.WebGateway;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -47,4 +48,12 @@ public class WebRoleController {
         List<RoleListDTO> roleList = webGateway.roleList(param);
         return ApiResult.success(roleList);
     }
+
+    @PostMapping("/editRoleMenuMap")
+    @Operation(summary = "编辑角色菜单权限")
+    public ApiResult<Void> editRoleMenuMap(@RequestBody @Valid editRoleMenuMapParam params) {
+        webGateway.editRoleMenuMap(params);
+        return ApiResult.success();
+    }
+
 }

+ 20 - 0
portal-service-common/src/main/java/com/hfln/portal/common/request/web/editRoleMenuMapParam.java

@@ -0,0 +1,20 @@
+package com.hfln.portal.common.request.web;
+
+import com.hfln.portal.common.vo.BaseVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+
+@Data
+public class editRoleMenuMapParam extends BaseVO {
+
+    @Schema(description = "角色ID")
+    @NotNull(message = "角色id不能为空")
+    private Long roleId;
+
+    @Schema(description = "菜单ID集合")
+    private List<Long> menuIdList;
+}

+ 2 - 0
portal-service-domain/src/main/java/com/hfln/portal/domain/gateway/WebGateway.java

@@ -56,6 +56,8 @@ public interface WebGateway {
 
     List<RoleListDTO> roleList(QueryRoleParam param);
 
+    void editRoleMenuMap(editRoleMenuMapParam params);
+
 
 
     /**

+ 32 - 0
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/gateway/impl/WebGatewayImpl.java

@@ -5,8 +5,10 @@ import cn.dev33.satoken.stp.SaTokenInfo;
 import cn.dev33.satoken.stp.StpUtil;
 import cn.hfln.framework.extension.BizException;
 import cn.hfln.framework.redis.util.RedisUtil;
+import cn.hutool.core.collection.CollUtil;
 import com.alibaba.excel.EasyExcel;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.hfln.portal.common.constant.UserConstants;
 import com.hfln.portal.common.constant.redis.RedisCacheConstant;
@@ -530,6 +532,36 @@ public class WebGatewayImpl implements WebGateway {
     }
 
     @Override
+    @Transactional
+    public void editRoleMenuMap(editRoleMenuMapParam params){
+        // 校验角色是否存在
+        TblRole role = tblRoleService.getById(params.getRoleId());
+        if (role == null) {
+            throw new BizException(ErrorEnum.ROLE_NOT_EXIST.getErrorCode(), ErrorEnum.ROLE_NOT_EXIST.getErrorMessage());
+        }
+
+        // 先删除旧映射
+        tblRoleMenuMapService.remove(
+                Wrappers.<TblRoleMenuMap>lambdaQuery()
+                .eq(TblRoleMenuMap::getRoleId, params.getRoleId())
+        );
+
+        // 再添加新映射
+        List<Long> menuIds = params.getMenuIdList();
+        if (CollUtil.isNotEmpty(menuIds)){
+            List<TblRoleMenuMap> maps = menuIds.stream()
+                    .map(menuId -> {
+                        TblRoleMenuMap map = new TblRoleMenuMap();
+                        map.setRoleId(params.getRoleId());
+                        map.setMenuId(menuId);
+                        return map;
+                    })
+                    .collect(Collectors.toList());
+            tblRoleMenuMapService.saveBatch(maps);
+        }
+    }
+
+    @Override
     public void logout() {
 
         StpUtil.logout(StpUtil.getLoginId(), StpUtil.getLoginDeviceType());