reactor: 获取路由菜单添加角色权限控制

This commit is contained in:
ray
2024-06-29 15:10:48 +08:00
parent da36355cd9
commit 57e6ac7fa6
7 changed files with 26 additions and 22 deletions

View File

@@ -9,6 +9,7 @@ import com.youlai.system.model.vo.MenuVO;
import com.youlai.system.common.model.Option; import com.youlai.system.common.model.Option;
import com.youlai.system.model.vo.RouteVO; import com.youlai.system.model.vo.RouteVO;
import com.youlai.system.plugin.syslog.annotation.LogAnnotation; import com.youlai.system.plugin.syslog.annotation.LogAnnotation;
import com.youlai.system.security.util.SecurityUtils;
import com.youlai.system.service.SysMenuService; import com.youlai.system.service.SysMenuService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
@@ -19,6 +20,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 菜单控制层 * 菜单控制层
@@ -53,7 +55,8 @@ public class SysMenuController {
@Operation(summary = "路由列表") @Operation(summary = "路由列表")
@GetMapping("/routes") @GetMapping("/routes")
public Result<List<RouteVO>> listRoutes() { public Result<List<RouteVO>> listRoutes() {
List<RouteVO> routeList = menuService.listRoutes(); Set<String> roles = SecurityUtils.getRoles();
List<RouteVO> routeList = menuService.listRoutes(roles);
return Result.success(routeList); return Result.success(routeList);
} }
@@ -106,6 +109,5 @@ public class SysMenuController {
return Result.judge(result); return Result.judge(result);
} }
} }

View File

@@ -1,9 +1,9 @@
package com.youlai.system.mapper; package com.youlai.system.mapper;
/** /*
* 菜单持久接口 * 菜单 访问
* *
* @author haoxr * @author Ray
* @since 2022/1/24 * @since 2022/1/24
*/ */
@@ -18,6 +18,6 @@ import java.util.Set;
@Mapper @Mapper
public interface SysMenuMapper extends BaseMapper<SysMenu> { public interface SysMenuMapper extends BaseMapper<SysMenu> {
List<RouteBO> listRoutes(); List<RouteBO> listRoutes(Set<String> roles);
} }

View File

@@ -68,11 +68,6 @@ public class RouteBO {
*/ */
private String redirect; private String redirect;
/**
* 拥有路由的权限
*/
private List<String> roles;
/** /**
* 【目录】只有一个子路由是否始终显示(1:是 0:否) * 【目录】只有一个子路由是否始终显示(1:是 0:否)
*/ */

View File

@@ -46,9 +46,6 @@ public class RouteVO {
@Schema(description = "是否隐藏(true-是 false-否)", example = "true") @Schema(description = "是否隐藏(true-是 false-否)", example = "true")
private Boolean hidden; private Boolean hidden;
@Schema(description = "拥有路由权限的角色编码", example = "['ADMIN','ROOT']")
private List<String> roles;
@Schema(description = "【菜单】是否开启页面缓存", example = "true") @Schema(description = "【菜单】是否开启页面缓存", example = "true")
@JsonInclude(JsonInclude.Include.NON_NULL) @JsonInclude(JsonInclude.Include.NON_NULL)
private Boolean keepAlive; private Boolean keepAlive;

View File

@@ -9,6 +9,7 @@ import com.youlai.system.model.vo.MenuVO;
import com.youlai.system.model.vo.RouteVO; import com.youlai.system.model.vo.RouteVO;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 菜单业务接口 * 菜单业务接口
@@ -39,7 +40,7 @@ public interface SysMenuService extends IService<SysMenu> {
/** /**
* 获取路由列表 * 获取路由列表
*/ */
List<RouteVO> listRoutes(); List<RouteVO> listRoutes( Set<String> roles);
/** /**
* 修改菜单显示状态 * 修改菜单显示状态

View File

@@ -141,9 +141,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* 获取路由列表 * 获取路由列表
*/ */
@Override @Override
@Cacheable(cacheNames = "menu", key = "'routes'") public List<RouteVO> listRoutes(Set<String> roles) {
public List<RouteVO> listRoutes() {
List<RouteBO> menuList = this.baseMapper.listRoutes(); if (CollectionUtil.isEmpty(roles)) {
return new ArrayList<>();
}
List<RouteBO> menuList = this.baseMapper.listRoutes(roles);
return buildRoutes(SystemConstants.ROOT_NODE_ID, menuList); return buildRoutes(SystemConstants.ROOT_NODE_ID, menuList);
} }
@@ -193,7 +197,6 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
RouteVO.Meta meta = new RouteVO.Meta(); RouteVO.Meta meta = new RouteVO.Meta();
meta.setTitle(routeBO.getName()); meta.setTitle(routeBO.getName());
meta.setIcon(routeBO.getIcon()); meta.setIcon(routeBO.getIcon());
meta.setRoles(routeBO.getRoles());
meta.setHidden(StatusEnum.DISABLE.getValue().equals(routeBO.getVisible())); meta.setHidden(StatusEnum.DISABLE.getValue().equals(routeBO.getVisible()));
// 【菜单】是否开启页面缓存 // 【菜单】是否开启页面缓存
if (MenuTypeEnum.MENU.equals(routeBO.getType()) if (MenuTypeEnum.MENU.equals(routeBO.getType())

View File

@@ -20,9 +20,6 @@
<result property="alwaysShow" column="always_show" jdbcType="INTEGER"/> <result property="alwaysShow" column="always_show" jdbcType="INTEGER"/>
<result property="keepAlive" column="keep_alive" jdbcType="INTEGER"/> <result property="keepAlive" column="keep_alive" jdbcType="INTEGER"/>
<result property="params" column="params" jdbcType="VARCHAR"/> <result property="params" column="params" jdbcType="VARCHAR"/>
<collection property="roles" ofType="string" javaType="list">
<result column="code"/>
</collection>
</resultMap> </resultMap>
<!-- 获取路由列表 --> <!-- 获取路由列表 -->
@@ -49,6 +46,15 @@
LEFT JOIN sys_role t3 ON t2.role_id = t3.id LEFT JOIN sys_role t3 ON t2.role_id = t3.id
WHERE WHERE
t1.type != '${@com.youlai.system.enums.MenuTypeEnum@BUTTON.getValue()}' t1.type != '${@com.youlai.system.enums.MenuTypeEnum@BUTTON.getValue()}'
<if test="roles != null and roles.size() > 0">
<!-- ROOT 可查看所有菜单 -->
<if test="!roles.contains('ROOT')">
AND t3.code IN
<foreach collection="roles" item="role" open="(" close=")" separator=",">
#{role}
</foreach>
</if>
</if>
ORDER BY ORDER BY
t1.sort t1.sort
</select> </select>