From c71ac5dbd305124dbb5f2fdd1a86ef8d794bda9d Mon Sep 17 00:00:00 2001
From: ranke <213539@qq.com>
Date: Fri, 16 Jan 2026 16:17:52 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8E=88=E6=9D=83=E8=8F=9C=E5=8D=95=E6=9D=83?=
=?UTF-8?q?=E9=99=90=E5=8F=AF=E9=80=89=E4=B8=8D=E5=B1=95=E7=A4=BA=E8=8F=9C?=
=?UTF-8?q?=E5=8D=95=E9=80=89=E9=A1=B9.=20http://172.16.46.63:31560/index.?=
=?UTF-8?q?php=3Fm=3Dtask&f=3Dview&taskID=3D707?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../20260116角色权限增加菜单是否显示字段.sql | 4 +++
.../src/main/resources/logback-spring.xml | 4 +++
.../controller/admin/auth/AuthController.java | 14 ++++++++
.../permission/PermissionController.java | 21 +++++++++---
.../PermissionAssignRoleMenuItemReqVO.java | 22 ++++++++++++
.../PermissionAssignRoleMenuReqVO.java | 4 +--
.../dal/dataobject/permission/RoleMenuDO.java | 5 +++
.../service/permission/PermissionService.java | 19 +++++++++++
.../permission/PermissionServiceImpl.java | 34 +++++++++++++++++++
9 files changed, 121 insertions(+), 6 deletions(-)
create mode 100644 sql/dm/20260116角色权限增加菜单是否显示字段.sql
create mode 100644 zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java
diff --git a/sql/dm/20260116角色权限增加菜单是否显示字段.sql b/sql/dm/20260116角色权限增加菜单是否显示字段.sql
new file mode 100644
index 00000000..a2ff62d4
--- /dev/null
+++ b/sql/dm/20260116角色权限增加菜单是否显示字段.sql
@@ -0,0 +1,4 @@
+ALTER TABLE "SYSTEM_ROLE_MENU" ADD COLUMN "SHOW_MENU" BIT DEFAULT ('1') NOT NULL;
+COMMENT ON COLUMN "SYSTEM_ROLE_MENU"."SHOW_MENU" IS '是否显示菜单';
+
+CREATE INDEX "IDX_SYSTEM_ROLE_ID_AND_MENU_ID" ON "SYSTEM_ROLE_MENU"(ROLE_ID,MENU_ID);
\ No newline at end of file
diff --git a/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml b/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml
index 0e551414..1decca4a 100644
--- a/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml
+++ b/zt-module-system/zt-module-system-server-app/src/main/resources/logback-spring.xml
@@ -73,4 +73,8 @@
+
+
+
+
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java
index ca3fb848..08430f4d 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/auth/AuthController.java
@@ -12,6 +12,7 @@ import com.zt.plat.module.system.controller.admin.auth.vo.*;
import com.zt.plat.module.system.convert.auth.AuthConvert;
import com.zt.plat.module.system.dal.dataobject.permission.MenuDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleDO;
+import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO;
import com.zt.plat.module.system.enums.logger.LoginLogTypeEnum;
import com.zt.plat.module.system.service.auth.AdminAuthService;
@@ -33,7 +34,9 @@ import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static com.zt.plat.framework.common.pojo.CommonResult.success;
@@ -126,7 +129,18 @@ public class AuthController {
// 1.3 获得菜单列表
Set menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId));
List menuList = menuService.getMenuList(menuIds);
+ Set roleMenuList = permissionService.getByRoleIdAndMenuIds(roleIds, menuIds);
+ Map roleMenuMap = new HashMap<>(roleMenuList.size());
+ for (RoleMenuDO roleMenu : roleMenuList) {
+ roleMenuMap.put(roleMenu.getMenuId(), roleMenu);
+ }
menuList = menuService.filterDisableMenus(menuList);
+ for (MenuDO menu : menuList) {
+ RoleMenuDO roleMenu = roleMenuMap.get(menu.getId());
+ if (roleMenu != null && roleMenu.getShowMenu() != null && !roleMenu.getShowMenu()) {
+ menu.setVisible(false);
+ }
+ }
// 2. 拼接结果返回
return success(AuthConvert.INSTANCE.convert(user, roles, menuList));
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java
index f34ec982..d84bc342 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/PermissionController.java
@@ -6,11 +6,13 @@ import com.zt.plat.framework.common.enums.CommonStatusEnum;
import com.zt.plat.framework.common.pojo.CommonResult;
import com.zt.plat.framework.common.util.collection.CollectionUtils;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleDataScopeReqVO;
+import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuReqVO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignUserRoleReqVO;
import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionUserSupervisionRespVO;
import com.zt.plat.module.system.dal.dataobject.permission.MenuDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleDO;
+import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
import com.zt.plat.module.system.dal.dataobject.user.AdminUserDO;
import com.zt.plat.module.system.enums.permission.MenuTypeEnum;
import com.zt.plat.module.system.service.permission.MenuService;
@@ -57,8 +59,16 @@ public class PermissionController {
@Parameter(name = "roleId", description = "角色编号", required = true)
@GetMapping("/list-role-menus")
@PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')")
- public CommonResult> getRoleMenuList(Long roleId) {
- return success(permissionService.getRoleMenuListByRoleId(roleId));
+ public CommonResult> getRoleMenuList(Long roleId) {
+ Set menuIds = permissionService.getRoleMenuListByRoleId(roleId);
+ Set menuList = permissionService.getByRoleIdAndMenuIds(Collections.singleton(roleId), menuIds);
+ Set result = menuList.stream().map(menu -> {
+ PermissionAssignRoleMenuItemReqVO reqVO = new PermissionAssignRoleMenuItemReqVO();
+ reqVO.setId(menu.getMenuId());
+ reqVO.setShowMenu(menu.getShowMenu());
+ return reqVO;
+ }).collect(Collectors.toSet());
+ return success(result);
}
@PostMapping("/assign-role-menu")
@@ -66,10 +76,13 @@ public class PermissionController {
@PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')")
public CommonResult assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) {
// 开启多租户的情况下,需要过滤掉未开通的菜单
- tenantService.handleTenantMenu(menuIds -> reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId)));
+ tenantService.handleTenantMenu(menuIds -> reqVO.getMenus().removeIf(menu -> !CollUtil.contains(menuIds, menu.getId())));
// 执行菜单的分配
- permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds());
+ permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenus().stream().map(PermissionAssignRoleMenuItemReqVO::getId).collect(Collectors.toSet()));
+
+ // 更新菜单的显示状态
+ permissionService.updateMenuDisplay(reqVO.getRoleId(), reqVO.getMenus());
return success(true);
}
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java
new file mode 100644
index 00000000..0d038266
--- /dev/null
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuItemReqVO.java
@@ -0,0 +1,22 @@
+package com.zt.plat.module.system.controller.admin.permission.vo.permission;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+
+@Schema(description = "管理后台 - 赋予角色菜单--菜单列表 Request VO")
+@Data
+public class PermissionAssignRoleMenuItemReqVO {
+
+ @Schema(description = "菜单ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+ @NotNull(message = "菜单ID不能为空")
+ private Long id;
+
+ @Schema(description = "是否显示菜单,默认显示(true)")
+ private Boolean showMenu = true;
+
+ @Schema(description = "是否显示菜单按钮是否点击过(避免大量更新数据,只更新点击过的)")
+ private Boolean showMenuChanged = false;
+
+}
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java
index 533314b9..5425d548 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/controller/admin/permission/vo/permission/PermissionAssignRoleMenuReqVO.java
@@ -15,7 +15,7 @@ public class PermissionAssignRoleMenuReqVO {
@NotNull(message = "角色编号不能为空")
private Long roleId;
- @Schema(description = "菜单编号列表", example = "1,3,5")
- private Set menuIds = Collections.emptySet(); // 兜底
+ @Schema(description = "菜单编列表")
+ private Set menus = Collections.emptySet(); // 兜底
}
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java
index ca462cb7..354c4746 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/dal/dataobject/permission/RoleMenuDO.java
@@ -33,4 +33,9 @@ public class RoleMenuDO extends TenantBaseDO {
*/
private Long menuId;
+ /**
+ * 是否显示菜单
+ */
+ private Boolean showMenu = true;
+
}
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java
index 69a4857c..7a23c24e 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionService.java
@@ -1,6 +1,8 @@
package com.zt.plat.module.system.service.permission;
import com.zt.plat.framework.common.biz.system.permission.dto.DeptDataPermissionRespDTO;
+import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO;
+import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
import com.zt.plat.module.system.enums.permission.DataScopeEnum;
import java.util.Collection;
@@ -153,4 +155,21 @@ public interface PermissionService {
*/
DataScopeEnum getUserDataPermissionLevel(Long userId);
+ /**
+ * 更新菜单是否显示
+ *
+ * @param roleId 用户编号
+ * @param menus 包含菜单编号和是否显示的Bean List
+ * @return
+ */
+ void updateMenuDisplay(Long roleId, Set menus);
+
+ /**
+ * 根据角色ID和菜单IDS批量查询
+ *
+ * @param ids
+ * @return
+ */
+ Set getByRoleIdAndMenuIds(Set roleIds, Set ids);
+
}
diff --git a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java
index 52265633..ce302e9e 100644
--- a/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java
+++ b/zt-module-system/zt-module-system-server/src/main/java/com/zt/plat/module/system/service/permission/PermissionServiceImpl.java
@@ -6,6 +6,8 @@ import cn.hutool.core.util.ArrayUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.spring.SpringUtil;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Suppliers;
import com.google.common.collect.Sets;
@@ -14,6 +16,7 @@ import com.zt.plat.framework.common.enums.CommonStatusEnum;
import com.zt.plat.framework.common.util.collection.CollectionUtils;
import com.zt.plat.framework.datapermission.core.annotation.DataPermission;
import com.zt.plat.framework.tenant.core.context.DeptContextHolder;
+import com.zt.plat.module.system.controller.admin.permission.vo.permission.PermissionAssignRoleMenuItemReqVO;
import com.zt.plat.module.system.dal.dataobject.permission.MenuDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleDO;
import com.zt.plat.module.system.dal.dataobject.permission.RoleMenuDO;
@@ -485,4 +488,35 @@ public class PermissionServiceImpl implements PermissionService {
return SpringUtil.getBean(getClass());
}
+ /**
+ * 更新菜单是否显示
+ *
+ * @param roleId 用户编号
+ * @param menus 包含菜单编号和是否显示的Bean List
+ * @return
+ */
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void updateMenuDisplay(Long roleId, Set menus) {
+ for (PermissionAssignRoleMenuItemReqVO menu : menus) {
+ if (menu.getShowMenuChanged()) {
+ LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
+ updateWrapper.eq(RoleMenuDO::getRoleId, roleId).eq(RoleMenuDO::getMenuId, menu.getId()).set(RoleMenuDO::getShowMenu, menu.getShowMenu());
+ roleMenuMapper.update(updateWrapper);
+ }
+ }
+ }
+
+ @Override
+ public Set getByRoleIdAndMenuIds(Set roleIds, Set ids) {
+ Set result = new HashSet<>(ids.size());
+ for (Long roleId : roleIds) {
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.eq(RoleMenuDO::getRoleId, roleId).in(!ids.isEmpty(),RoleMenuDO::getMenuId, ids);
+ result.addAll(roleMenuMapper.selectList(queryWrapper));
+ }
+ return result;
+ }
+
+
}