From 1002b36c0a698c794320d1544c464c13b303e53c Mon Sep 17 00:00:00 2001
From: RuoYi <yzz_ivy@163.com>
Date: Thu, 16 Apr 2026 13:44:02 +0800
Subject: [PATCH] 优化白名单支持对通配符路径匹配
---
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java | 49 ++++++++++++++++++++++++++++++++++++-------------
1 files changed, 36 insertions(+), 13 deletions(-)
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java
index c5ae0e3..44b15cb 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java
@@ -1,6 +1,7 @@
package com.ruoyi.system.controller;
import java.util.List;
+import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -43,7 +44,7 @@
{
Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuList(menu, userId);
- return AjaxResult.success(menus);
+ return success(menus);
}
/**
@@ -53,7 +54,7 @@
@GetMapping(value = "/{menuId}")
public AjaxResult getInfo(@PathVariable Long menuId)
{
- return AjaxResult.success(menuService.selectMenuById(menuId));
+ return success(menuService.selectMenuById(menuId));
}
/**
@@ -64,7 +65,7 @@
{
Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuList(menu, userId);
- return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
+ return success(menuService.buildMenuTreeSelect(menus));
}
/**
@@ -89,13 +90,17 @@
@PostMapping
public AjaxResult add(@Validated @RequestBody SysMenu menu)
{
- if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+ if (!menuService.checkMenuNameUnique(menu))
{
- return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
{
- return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ }
+ else if (!menuService.checkRouteConfigUnique(menu))
+ {
+ return error("新增菜单'" + menu.getMenuName() + "'失败,路由名称或地址已存在");
}
menu.setCreateBy(SecurityUtils.getUsername());
return toAjax(menuService.insertMenu(menu));
@@ -109,20 +114,38 @@
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysMenu menu)
{
- if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
+ if (!menuService.checkMenuNameUnique(menu))
{
- return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+ return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
{
- return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+ return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
}
else if (menu.getMenuId().equals(menu.getParentId()))
{
- return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+ return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+ }
+ else if (!menuService.checkRouteConfigUnique(menu))
+ {
+ return error("修改菜单'" + menu.getMenuName() + "'失败,路由名称或地址已存在");
}
menu.setUpdateBy(SecurityUtils.getUsername());
return toAjax(menuService.updateMenu(menu));
+ }
+
+ /**
+ * 保存菜单排序
+ */
+ @RequiresPermissions("system:menu:edit")
+ @Log(title = "保存菜单排序", businessType = BusinessType.UPDATE)
+ @PutMapping("/updateSort")
+ public AjaxResult updateSort(@RequestBody Map<String, String> params)
+ {
+ String[] menuIds = params.get("menuIds").split(",");
+ String[] orderNums = params.get("orderNums").split(",");
+ menuService.updateMenuSort(menuIds, orderNums);
+ return success();
}
/**
@@ -135,11 +158,11 @@
{
if (menuService.hasChildByMenuId(menuId))
{
- return AjaxResult.error("存在子菜单,不允许删除");
+ return warn("存在子菜单,不允许删除");
}
if (menuService.checkMenuExistRole(menuId))
{
- return AjaxResult.error("菜单已分配,不允许删除");
+ return warn("菜单已分配,不允许删除");
}
return toAjax(menuService.deleteMenuById(menuId));
}
@@ -154,6 +177,6 @@
{
Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
- return AjaxResult.success(menuService.buildMenus(menus));
+ return success(menuService.buildMenus(menus));
}
}
\ No newline at end of file
--
Gitblit v1.9.3