Browse Source

1、不是平台管理员,不显示指定名称菜单

dongpo 1 năm trước cách đây
mục cha
commit
1ca946524b

+ 27 - 0
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/permission/MenuHideEnum.java

@@ -0,0 +1,27 @@
+package cn.iocoder.yudao.module.system.enums.permission;
+
+/**
+ * 需要隐藏的菜单
+ */
+public enum MenuHideEnum {
+
+    MENU_MANAGE("菜单管理", "102"),
+    SYSTEM_DICT("字典管理(系统)", "105"),
+    ;
+
+    private final String name;
+    private final String id;
+
+    MenuHideEnum(String name, String id) {
+        this.name = name;
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getId() {
+        return id;
+    }
+}

+ 10 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java

@@ -18,6 +18,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.tenant.TenantDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.enums.logger.LoginLogTypeEnum;
+import cn.iocoder.yudao.module.system.enums.permission.MenuHideEnum;
 import cn.iocoder.yudao.module.system.service.auth.AdminAuthService;
 import cn.iocoder.yudao.module.system.service.permission.MenuService;
 import cn.iocoder.yudao.module.system.service.permission.PermissionService;
@@ -37,10 +38,12 @@ import javax.annotation.Resource;
 import javax.annotation.security.PermitAll;
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.Valid;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
@@ -149,6 +152,13 @@ public class AuthController {
         Set<Long> menuIds = permissionService.getRoleMenuListByRoleId(convertSet(roles, RoleDO::getId));
         List<MenuDO> menuList = menuService.getMenuList(menuIds);
         menuList.removeIf(menu -> !CommonStatusEnum.ENABLE.getStatus().equals(menu.getStatus())); // 移除禁用的菜单
+
+        // 不是平台管理员,移除指定的菜单
+        Set<String> nameSet = Arrays.stream(MenuHideEnum.values()).map(MenuHideEnum::getName).collect(Collectors.toSet());
+        if (CollUtil.isNotEmpty(nameSet) && !"oneportal_saas_管理员".equals(user.getRemark())) {
+            menuList.removeIf(menu -> nameSet.contains(menu.getName()));
+        }
+
         Optional<MenuDO> manageMenu = menuList.stream()
                 .filter(menu -> "企业管理".equals(menu.getName())) // 查找name为“企业管理”的MenuDO
                 .findFirst(); // 返回第一个找到的MenuDO(如果有的话)

+ 21 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/permission/MenuController.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.system.controller.admin.permission;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
@@ -11,7 +12,10 @@ import cn.iocoder.yudao.module.system.controller.admin.permission.vo.menu.MenuSi
 import cn.iocoder.yudao.module.system.convert.auth.AuthConvert;
 import cn.iocoder.yudao.module.system.dal.dataobject.permission.MenuDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
+import cn.iocoder.yudao.module.system.enums.permission.MenuHideEnum;
 import cn.iocoder.yudao.module.system.service.permission.MenuService;
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -21,12 +25,15 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.validation.Valid;
+import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
+import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
 
 @Tag(name = "管理后台 - 菜单")
 @RestController
@@ -37,6 +44,9 @@ public class MenuController {
     @Resource
     private MenuService menuService;
 
+    @Resource
+    private AdminUserService userService;
+
     @PostMapping("/create")
     @Operation(summary = "创建菜单")
     @PreAuthorize("@ss.hasPermission('system:menu:create')")
@@ -77,6 +87,17 @@ public class MenuController {
     public CommonResult<List<MenuSimpleRespVO>> getSimpleMenuList() {
         List<MenuDO> list = menuService.getMenuListByTenant(
                 new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()));
+        // 不是平台管理员,移除指定的菜单
+        Long loginUserId = getLoginUserId();
+        if (loginUserId != null) {
+            AdminUserDO user = userService.getUser(loginUserId);
+            if (user != null) {
+                Set<String> nameSet = Arrays.stream(MenuHideEnum.values()).map(MenuHideEnum::getName).collect(Collectors.toSet());
+                if (CollUtil.isNotEmpty(nameSet) && !"oneportal_saas_管理员".equals(user.getRemark())) {
+                    list.removeIf(menu -> nameSet.contains(menu.getName()));
+                }
+            }
+        }
         list.sort(Comparator.comparing(MenuDO::getSort));
         return success(BeanUtils.toBean(list, MenuSimpleRespVO.class));
     }

+ 14 - 0
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/permission/MenuServiceImpl.java

@@ -14,6 +14,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO;
 import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import cn.iocoder.yudao.module.system.dal.mysql.permission.MenuMapper;
 import cn.iocoder.yudao.module.system.dal.redis.RedisKeyConstants;
+import cn.iocoder.yudao.module.system.enums.permission.MenuHideEnum;
 import cn.iocoder.yudao.module.system.enums.permission.MenuTypeEnum;
 import cn.iocoder.yudao.module.system.service.tenant.TenantService;
 import cn.iocoder.yudao.module.system.service.user.AdminUserService;
@@ -296,6 +297,19 @@ public class MenuServiceImpl implements MenuService {
         // 获取当前parentId的直接子菜单
         List<MenuDO> childrenMenus = this.getMenuList(new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus()).setParentId(parentId));
 
+        // 不是平台管理员,移除指定的菜单
+        Long loginUserId = getLoginUserId();
+        if (loginUserId != null) {
+            AdminUserDO user = userService.getUser(loginUserId);
+            if (user != null) {
+                Set<String> nameSet = Arrays.stream(MenuHideEnum.values()).map(MenuHideEnum::getName).collect(Collectors.toSet());
+                if (CollUtil.isNotEmpty(nameSet) && !"oneportal_saas_管理员".equals(user.getRemark())) {
+                    childrenMenus.removeIf(menu -> nameSet.contains(menu.getName()));
+                }
+            }
+        }
+
+
         // 将当前层级的menuId添加到Set中
         for (MenuDO menu : childrenMenus) {
             menuIds.add(menu.getId()); // 假设Menu类有一个getId()方法返回menuId