Compare commits

..

No commits in common. "a5680029ffe4f8faa29139e249c80bea60895a0a" and "388579409ea2503d30881c928f53d9db30e1aadf" have entirely different histories.

18 changed files with 38 additions and 246 deletions

View File

@ -14,8 +14,8 @@ public class NewCodeGet {
// 作者名称
public static final String author = "Bunny";
// 公共路径
// public static final String outputDir = "D:\\MyFolder\\auth-admin\\auth-server-java\\service";
public static final String outputDir = "D:\\Project\\web\\PC\\auth\\auth-server-java\\service";
public static final String outputDir = "D:\\MyFolder\\auth-admin\\auth-server-java\\service";
// public static final String outputDir = "D:\\Project\\web\\PC\\auth\\auth-server\\services";
// 实体类名称
public static final String entity = "Bunny";

View File

@ -1,21 +0,0 @@
package cn.bunny.dao.dto.router;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Schema(name = "RouterManageDto对象", title = "路由查询表单", description = "路由查询表单")
public class RouterManageDto {
@Schema(name = "title", title = "路由标题")
private String title;
@Schema(name = "visible", title = "是否显示")
private Boolean visible;
}

View File

@ -1,7 +1,11 @@
package cn.bunny.dao.entity.system;
import cn.bunny.dao.entity.BaseEntity;
import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
@ -10,17 +14,17 @@ import lombok.experimental.Accessors;
/**
* <p>
* 系统菜单表
*
* </p>
*
* @author Bunny
* @since 2024-09-28
* @since 2024-09-27
*/
@Getter
@Setter
@Accessors(chain = true)
@TableName("sys_router")
@ApiModel(value = "Router对象", description = "系统菜单")
@ApiModel(value = "Router对象", description = "系统路由")
public class Router extends BaseEntity {
@ApiModelProperty("在项目中路径")
@ -30,26 +34,21 @@ public class Router extends BaseEntity {
private String routeName;
@ApiModelProperty("父级id")
@JsonProperty("parentId")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@JSONField(serializeUsing = ToStringSerializer.class)
private Long parentId;
@ApiModelProperty("菜单类型 `0`代表菜单、`1`代表`iframe`、`2`代表外链、`3`代表按钮)")
private Integer menuType;
@ApiModelProperty("路由title")
private String title;
@ApiModelProperty("图标")
private String icon;
@ApiModelProperty("进入动画")
private String enterTransition;
@ApiModelProperty("退出动画")
private String leaveTransition;
@ApiModelProperty("等级")
private Integer routerRank;
@ApiModelProperty("是否显示")
private Boolean visible;
}

View File

@ -17,11 +17,11 @@ import java.util.List;
@Builder
public class PageResult<T> implements Serializable {
// 当前页
private Long pageNo;
private Integer pageNo;
// 每页记录数
private Long pageSize;
private Integer pageSize;
// 总记录数
private Long total;
private long total;
// 当前页数据集合
private List<T> list;
}

View File

@ -3,7 +3,6 @@ package cn.bunny.dao.vo.router;
import cn.bunny.dao.vo.BaseVo;
import com.alibaba.fastjson2.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -17,43 +16,31 @@ import java.util.List;
@NoArgsConstructor
@Builder
@ApiModel(value = "RouterControllerVo对象", description = "路由管理端返回对象")
public class RouterManageVo extends BaseVo {
public class RouterControllerVo extends BaseVo {
@ApiModelProperty("在项目中路径")
private String path;
@ApiModelProperty("路由名称")
@JsonProperty("name")
private String routeName;
@ApiModelProperty("父级id")
@JsonProperty("parentId")
@JsonFormat(shape = JsonFormat.Shape.STRING)
@JSONField(serializeUsing = ToStringSerializer.class)
private Long parentId;
@ApiModelProperty("菜单类型")
private Integer menuType;
@ApiModelProperty("路由title")
@ApiModelProperty("title名称")
private String title;
@ApiModelProperty("图标")
private String icon;
@ApiModelProperty("链接地址(需要内嵌的`iframe`链接地址)")
private String frameSrc;
@ApiModelProperty("等级")
@JsonProperty("rank")
private Integer routerRank;
@ApiModelProperty("是否显示")
private Boolean visible;
@ApiModelProperty("是否显示")
private Boolean frameLoading;
@ApiModelProperty("子路由")
private List<RouterManageVo> children;
private List<RouterControllerVo> children;
}

View File

@ -30,7 +30,4 @@ public class RouterMeta {
@ApiModelProperty(value = "权限列表")
private List<String> auths;
@ApiModelProperty("路由动画")
private RouterTransition transition;
}

View File

@ -1,21 +0,0 @@
package cn.bunny.dao.vo.router;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ApiModel(value = "RouterTransition对象", description = "路由动画")
public class RouterTransition {
@ApiModelProperty("进入动画")
private String enterTransition;
@ApiModelProperty("退出动画")
private String leaveTransition;
}

View File

@ -35,16 +35,10 @@ public class UserRouterVo {
@ApiModelProperty("在项目中路径")
private String path;
@ApiModelProperty("菜单类型")
private Integer menuType;
@ApiModelProperty("路由名称")
@JsonProperty("name")
private String routeName;
@ApiModelProperty("路由动画")
private RouterTransition transition;
@ApiModelProperty("meta内容")
private RouterMeta meta;

View File

@ -1,22 +1,14 @@
package cn.bunny.services.controller;
import cn.bunny.dao.dto.router.RouterManageDto;
import cn.bunny.dao.entity.system.Router;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.pojo.result.Result;
import cn.bunny.dao.vo.router.RouterManageVo;
import cn.bunny.dao.vo.router.UserRouterVo;
import cn.bunny.services.service.RouterService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
import java.util.List;
@ -38,30 +30,8 @@ public class RouterController {
@Operation(summary = "获取用户菜单", description = "获取用户菜单")
@GetMapping("getRouterAsync")
public Mono<Result<List<UserRouterVo>>> getRouterAsync() {
public Result<List<UserRouterVo>> getRouterAsync() {
List<UserRouterVo> voList = routerService.getRouterAsync();
return Mono.just(Result.success(voList));
}
@Operation(summary = "分页管理菜单列表", description = "分页管理菜单列表")
@GetMapping("getMenusByPage/{page}/{limit}")
public Mono<Result<PageResult<RouterManageVo>>> getMenusByPage(
@Parameter(name = "page", description = "当前页", required = true)
@PathVariable("page") Integer page,
@Parameter(name = "limit", description = "每页记录数", required = true)
@PathVariable("limit") Integer limit,
RouterManageDto dto) {
Page<Router> pageParams = new Page<>(page, limit);
PageResult<RouterManageVo> voPageResult = routerService.getMenusByPage(pageParams, dto);
return Mono.just(Result.success(voPageResult));
}
@Operation(summary = "管理菜单列表", description = "管理菜单列表")
@GetMapping("getMenus")
public Mono<Result<List<RouterManageVo>>> getMenu(RouterManageDto dto) {
List<RouterManageVo> voPageResult = routerService.getMenu(dto);
return Mono.just(Result.success(voPageResult));
return Result.success(voList);
}
}

View File

@ -38,9 +38,9 @@ public class UserController {
}
@Operation(summary = "退出登录", description = "退出登录")
@PostMapping("logout")
public Result<String> logout() {
userService.logout();
@PostMapping("logOut")
public Result<String> logOut() {
userService.logOut();
return Result.success(ResultCodeEnum.LOGOUT_SUCCESS);
}
}

View File

@ -1,13 +1,8 @@
package cn.bunny.services.mapper;
import cn.bunny.dao.dto.router.RouterManageDto;
import cn.bunny.dao.entity.system.Router;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -37,13 +32,4 @@ public interface RouterMapper extends BaseMapper<Router> {
* @return 路由列表
*/
List<Router> selectParentListByRouterId(List<Long> ids);
/**
* * 管理菜单列表
*
* @param pageParams 分页想去
* @param dto 路由查询表单
* @return 分页结果
*/
IPage<Router> selectListByPage(@Param("page") Page<Router> pageParams, @Param("dto") RouterManageDto dto);
}

View File

@ -6,8 +6,6 @@ import cn.bunny.dao.entity.system.Power;
import cn.bunny.services.mapper.PowerMapper;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.authorization.AuthorizationDecision;
import org.springframework.security.authorization.AuthorizationManager;
import org.springframework.security.core.Authentication;
@ -26,11 +24,9 @@ import java.util.function.Supplier;
@Component
@Slf4j
public class CustomAuthorizationManagerServiceImpl implements AuthorizationManager<RequestAuthorizationContext> {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private PowerMapper powerMapper;
private final PowerMapper powerMapper;
public CustomAuthorizationManagerServiceImpl(PowerMapper powerMapper) {this.powerMapper = powerMapper;}
@Override
public AuthorizationDecision check(Supplier<Authentication> authentication, RequestAuthorizationContext context) {
@ -51,18 +47,16 @@ public class CustomAuthorizationManagerServiceImpl implements AuthorizationManag
List<String> roleCodeList = authentication.get().getAuthorities().stream().map(GrantedAuthority::getAuthority).toList();
// 校验权限
return new AuthorizationDecision(hasAuth(requestURI));
return new AuthorizationDecision(hasAuth(requestURI, roleCodeList));
}
/**
* 查询用户所属的角色信息
*
* @param requestURI 请求url地址
* @param roleCodeList 角色列表
*/
private Boolean hasAuth(String requestURI) {
// 角色代码列表
List<String> roleCodeList = BaseContext.getLoginVo().getRoles();
private Boolean hasAuth(String requestURI, List<String> roleCodeList) {
// 判断是否是 admin
boolean isAdmin = roleCodeList.stream().anyMatch(role -> role.equals("admin"));
if (isAdmin) return true;

View File

@ -1,11 +1,7 @@
package cn.bunny.services.service;
import cn.bunny.dao.dto.router.RouterManageDto;
import cn.bunny.dao.entity.system.Router;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.vo.router.RouterManageVo;
import cn.bunny.dao.vo.router.UserRouterVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@ -25,21 +21,4 @@ public interface RouterService extends IService<Router> {
* @return 路遇列表
*/
List<UserRouterVo> getRouterAsync();
/**
* * 管理菜单列表
*
* @param pageParams 分页想去
* @param dto 路由查询表单
* @return 系统菜单表分页
*/
PageResult<RouterManageVo> getMenusByPage(Page<Router> pageParams, RouterManageDto dto);
/**
* * 管理菜单列表
*
* @param dto 路由查询表单
* @return 系统菜单表
*/
List<RouterManageVo> getMenu(RouterManageDto dto);
}

View File

@ -35,5 +35,5 @@ public interface UserService extends IService<AdminUser> {
/**
* * 退出登录
*/
void logout();
void logOut();
}

View File

@ -2,21 +2,15 @@ package cn.bunny.services.service.impl;
import cn.bunny.common.service.context.BaseContext;
import cn.bunny.common.service.exception.BunnyException;
import cn.bunny.dao.dto.router.RouterManageDto;
import cn.bunny.dao.entity.system.Router;
import cn.bunny.dao.pojo.constant.RedisUserConstant;
import cn.bunny.dao.pojo.result.PageResult;
import cn.bunny.dao.pojo.result.ResultCodeEnum;
import cn.bunny.dao.vo.router.RouterManageVo;
import cn.bunny.dao.vo.router.RouterMeta;
import cn.bunny.dao.vo.router.UserRouterVo;
import cn.bunny.dao.vo.user.LoginVo;
import cn.bunny.services.mapper.RouterMapper;
import cn.bunny.services.service.RouterService;
import cn.bunny.services.service.process.RouterServiceProcess;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -69,8 +63,9 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
// 查询用户角色判断是否是管理员角色
boolean isAdmin = roleList.stream().anyMatch(authUserRole -> authUserRole.equals("admin"));
if (isAdmin) routerList = list();
else {
if (isAdmin) {
routerList = list();
} else {
List<Long> routerIds = baseMapper.selectListByUserId(loginVo.getId());
routerList = baseMapper.selectParentListByRouterId(routerIds);
}
@ -105,54 +100,4 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
return list;
}
/**
* * 管理菜单列表
*
* @param pageParams 分页想去
* @param dto 路由查询表单
* @return 系统菜单表分页
*/
@Override
public PageResult<RouterManageVo> getMenusByPage(Page<Router> pageParams, RouterManageDto dto) {
IPage<Router> page = baseMapper.selectListByPage(pageParams, dto);
// 构建返回对象
List<RouterManageVo> voList = page.getRecords().stream().map(router -> {
RouterManageVo routerManageVo = new RouterManageVo();
BeanUtils.copyProperties(router, routerManageVo);
return routerManageVo;
}).toList();
return PageResult.<RouterManageVo>builder()
.list(voList)
.pageNo(page.getCurrent())
.pageSize(page.getSize())
.total(page.getTotal())
.build();
}
/**
* * 管理菜单列表
*
* @param dto 路由查询表单
* @return 系统菜单表
*/
@Override
public List<RouterManageVo> getMenu(RouterManageDto dto) {
String title = dto.getTitle();
Boolean visible = dto.getVisible();
// 构建查询条件
LambdaQueryWrapper<Router> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.like(title != null, Router::getTitle, title)
.or()
.eq(visible != null, Router::getVisible, visible);
return list().stream().map(router -> {
RouterManageVo routerManageVo = new RouterManageVo();
BeanUtils.copyProperties(router, routerManageVo);
return routerManageVo;
}).toList();
}
}

View File

@ -93,7 +93,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, AdminUser> implemen
* 退出登录
*/
@Override
public void logout() {
public void logOut() {
LoginVo loginVo = BaseContext.getLoginVo();
redisTemplate.delete(RedisUserConstant.getAdminLoginInfoPrefix(loginVo.getUsername()));
}

View File

@ -1,7 +1,7 @@
package cn.bunny.services.service.process;
import cn.bunny.dao.vo.common.TreeSelectVo;
import cn.bunny.dao.vo.router.RouterManageVo;
import cn.bunny.dao.vo.router.RouterControllerVo;
import cn.bunny.dao.vo.router.UserRouterVo;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Component;
@ -38,7 +38,7 @@ public class RouterServiceProcess {
* @param nodeList 返回VO列表
* @return 返回路由列表
*/
public List<RouterManageVo> handleGetChildrenWithRouterControllerVo(Long nodeId, List<RouterManageVo> nodeList) {
public List<RouterControllerVo> handleGetChildrenWithRouterControllerVo(Long nodeId, List<RouterControllerVo> nodeList) {
return nodeList.stream()
.filter(node -> node.getParentId().equals(nodeId))
.peek(node -> node.setChildren(handleGetChildrenWithRouterControllerVo(node.getId(), nodeList)))

View File

@ -8,11 +8,8 @@
<result column="path" property="path"/>
<result column="route_name" property="routeName"/>
<result column="parent_id" property="parentId"/>
<result column="menu_type" property="menuType"/>
<result column="title" property="title"/>
<result column="icon" property="icon"/>
<result column="enter_transition" property="enterTransition"/>
<result column="leave_transition" property="leaveTransition"/>
<result column="router_rank" property="routerRank"/>
<result column="visible" property="visible"/>
<result column="create_user" property="createUser"/>
@ -24,11 +21,8 @@
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
id
, path, route_name, parent_id, menu_type, title, icon, enter_transition, leave_transition, router_rank, visible, create_user, update_user, update_time, create_time, is_deleted
id, path, route_name, parent_id, title, icon, router_rank, visible, create_user, update_user, update_time, create_time, is_deleted
</sql>
<!-- 根据用户ID查找路由列表 -->
<select id="selectListByUserId" resultType="java.lang.Long">
SELECT router.id
FROM sys_user_role user_role
@ -55,15 +49,4 @@
FROM ParentChain;
</select>
<!-- 管理菜单列表 -->
<select id="selectListByPage" resultType="cn.bunny.dao.entity.system.Router">
select *
from sys_router
<if test="dto.title != null and dto.title != ''">
title like CONCAT('%',#{dto.title},'%')
</if>
<if test="dto.visible != null">
visible = #{dto.visible}
</if>
</select>
</mapper>