refactor: 重构菜单内容
This commit is contained in:
parent
a201b965d7
commit
499876773f
|
@ -71,7 +71,6 @@ public class DatabaseBackupJob implements Job {
|
|||
StringBuilder stringBuilder = new StringBuilder();
|
||||
while ((line = reader.readLine()) != null) {
|
||||
stringBuilder.append(line);
|
||||
System.out.println(line);
|
||||
}
|
||||
jobDataMap.put("output", stringBuilder.toString());
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.bunny.services.security.custom;
|
||||
|
||||
import cn.bunny.domain.constant.RedisUserConstant;
|
||||
import cn.bunny.domain.system.entity.Power;
|
||||
import cn.bunny.domain.system.entity.Permission;
|
||||
import cn.bunny.domain.system.entity.Role;
|
||||
import cn.bunny.domain.vo.LoginVo;
|
||||
import cn.bunny.domain.vo.result.ResultCodeEnum;
|
||||
|
@ -116,10 +116,10 @@ public class CustomAuthorizationManagerServiceImpl implements AuthorizationManag
|
|||
if (requestURI.contains("noManage")) return true;
|
||||
|
||||
// 根据角色列表查询权限信息
|
||||
List<Power> powerList = powerMapper.selectListByUserId(userId);
|
||||
List<Permission> permissionList = powerMapper.selectListByUserId(userId);
|
||||
|
||||
// 判断是否与请求路径匹配
|
||||
return powerList.stream().map(Power::getRequestUrl)
|
||||
return permissionList.stream().map(Permission::getRequestUrl)
|
||||
.filter(Objects::nonNull)
|
||||
.anyMatch(requestUrl -> {
|
||||
if ((requestUrl.contains("/*") || requestUrl.contains("/**"))) {
|
||||
|
|
|
@ -36,15 +36,15 @@ public class MenuIconController {
|
|||
private MenuIconService menuIconService;
|
||||
|
||||
@Operation(summary = "分页查询系统菜单图标", description = "分页查询系统菜单图标")
|
||||
@GetMapping("getMenuIconList/{page}/{limit}")
|
||||
public Result<PageResult<MenuIconVo>> getMenuIconList(
|
||||
@GetMapping("menuIconList/{page}/{limit}")
|
||||
public Result<PageResult<MenuIconVo>> menuIconList(
|
||||
@Parameter(name = "page", description = "当前页", required = true)
|
||||
@PathVariable("page") Integer page,
|
||||
@Parameter(name = "limit", description = "每页记录数", required = true)
|
||||
@PathVariable("limit") Integer limit,
|
||||
MenuIconDto dto) {
|
||||
Page<MenuIcon> pageParams = new Page<>(page, limit);
|
||||
PageResult<MenuIconVo> pageResult = menuIconService.getMenuIconList(pageParams, dto);
|
||||
PageResult<MenuIconVo> pageResult = menuIconService.menuIconList(pageParams, dto);
|
||||
return Result.success(pageResult);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package cn.bunny.services.controller.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.Power;
|
||||
import cn.bunny.domain.system.dto.power.PowerAddDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerUpdateBatchByParentIdDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerUpdateDto;
|
||||
import cn.bunny.domain.system.entity.Permission;
|
||||
import cn.bunny.domain.system.vo.PowerVo;
|
||||
import cn.bunny.domain.vo.result.PageResult;
|
||||
import cn.bunny.domain.vo.result.Result;
|
||||
|
@ -44,7 +44,7 @@ public class PowerController {
|
|||
@Parameter(name = "limit", description = "每页记录数", required = true)
|
||||
@PathVariable("limit") Integer limit,
|
||||
PowerDto dto) {
|
||||
Page<Power> pageParams = new Page<>(page, limit);
|
||||
Page<Permission> pageParams = new Page<>(page, limit);
|
||||
PageResult<PowerVo> pageResult = powerService.getPowerList(pageParams, dto);
|
||||
return Result.success(pageResult);
|
||||
}
|
||||
|
|
|
@ -1,19 +1,13 @@
|
|||
package cn.bunny.services.controller.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.Router;
|
||||
import cn.bunny.domain.system.dto.router.RouterAddDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterManageDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterUpdateByIdWithRankDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterUpdateDto;
|
||||
import cn.bunny.domain.system.vo.router.RouterManageVo;
|
||||
import cn.bunny.domain.system.vo.router.UserRouterVo;
|
||||
import cn.bunny.domain.vo.result.PageResult;
|
||||
import cn.bunny.domain.system.vo.router.WebUserRouterVo;
|
||||
import cn.bunny.domain.vo.result.Result;
|
||||
import cn.bunny.domain.vo.result.ResultCodeEnum;
|
||||
import cn.bunny.services.service.system.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 jakarta.annotation.Resource;
|
||||
import jakarta.validation.Valid;
|
||||
|
@ -38,31 +32,16 @@ public class RouterController {
|
|||
private RouterService routerService;
|
||||
|
||||
@Operation(summary = "获取用户菜单", description = "获取用户菜单")
|
||||
@GetMapping("noManage/getRouterAsync")
|
||||
public Result<List<UserRouterVo>> getRouterAsync() {
|
||||
List<UserRouterVo> voList = routerService.getRouterAsync();
|
||||
@GetMapping("noManage/routerAsync")
|
||||
public Result<List<WebUserRouterVo>> routerAsync() {
|
||||
List<WebUserRouterVo> voList = routerService.routerAsync();
|
||||
return Result.success(voList);
|
||||
}
|
||||
|
||||
@Operation(summary = "分页管理菜单列", description = "分页管理菜单列")
|
||||
@GetMapping("getMenusList/{page}/{limit}")
|
||||
public 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 Result.success(voPageResult);
|
||||
}
|
||||
|
||||
@Operation(summary = "分页查询管理菜单列表", description = "分页查询管理菜单列表")
|
||||
@GetMapping("getMenusList")
|
||||
public Result<List<RouterManageVo>> getMenusList(RouterManageDto dto) {
|
||||
List<RouterManageVo> voPageResult = routerService.getMenusList(dto);
|
||||
|
||||
@Operation(summary = "查询管理菜单列表", description = "查询管理菜单列表")
|
||||
@GetMapping("menuList")
|
||||
public Result<List<RouterManageVo>> menuList() {
|
||||
List<RouterManageVo> voPageResult = routerService.menuList();
|
||||
return Result.success(voPageResult);
|
||||
}
|
||||
|
||||
|
@ -80,13 +59,6 @@ public class RouterController {
|
|||
return Result.success(ResultCodeEnum.UPDATE_SUCCESS);
|
||||
}
|
||||
|
||||
@Operation(summary = "快速更新菜单排序", description = "快速更新菜单排序")
|
||||
@PutMapping("updateMenuByIdWithRank")
|
||||
public Result<Object> updateMenuByIdWithRank(@Valid @RequestBody RouterUpdateByIdWithRankDto dto) {
|
||||
routerService.updateMenuByIdWithRank(dto);
|
||||
return Result.success(ResultCodeEnum.UPDATE_SUCCESS);
|
||||
}
|
||||
|
||||
@Operation(summary = "删除路由菜单", description = "删除路由菜单")
|
||||
@DeleteMapping("deletedMenuByIds")
|
||||
public Result<Object> deletedMenuByIds(@RequestBody List<Long> ids) {
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
package cn.bunny.services.controller.system;
|
||||
|
||||
import cn.bunny.domain.system.dto.router.AssignRolesToRoutersDto;
|
||||
import cn.bunny.domain.vo.result.Result;
|
||||
import cn.bunny.services.service.system.RouterRoleService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -23,7 +22,7 @@ import java.util.List;
|
|||
@RequestMapping("api/routerRole")
|
||||
public class RouterRoleController {
|
||||
|
||||
@Autowired
|
||||
@Resource
|
||||
private RouterRoleService routerRoleService;
|
||||
|
||||
@Operation(summary = "根据菜单id获取所有角色", description = "根据菜单id获取所有角色")
|
||||
|
@ -33,20 +32,6 @@ public class RouterRoleController {
|
|||
return Result.success(roleListByRouterId);
|
||||
}
|
||||
|
||||
@Operation(summary = "为菜单分配角色", description = "为菜单分配角色")
|
||||
@PostMapping("assignRolesToRouter")
|
||||
public Result<String> assignRolesToRouter(@RequestBody AssignRolesToRoutersDto dto) {
|
||||
routerRoleService.assignRolesToRouter(dto);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "批量为菜单添加角色", description = "批量为菜单添加角色")
|
||||
@PostMapping("assignAddBatchRolesToRouter")
|
||||
public Result<String> assignAddBatchRolesToRouter(@RequestBody AssignRolesToRoutersDto dto) {
|
||||
routerRoleService.assignAddBatchRolesToRouter(dto);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@Operation(summary = "清除选中菜单所有角色", description = "清除选中菜单所有角色")
|
||||
@DeleteMapping("clearAllRolesSelect")
|
||||
public Result<String> clearAllRolesSelect(@RequestBody List<Long> routerIds) {
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
package cn.bunny.domain.system.dto.router;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Schema(name = "AssignRolesToRoutersDto对象", title = "路由分配角色", description = "路由分配角色")
|
||||
public class AssignRolesToRoutersDto {
|
||||
|
||||
@Schema(name = "routerId", title = "路由id")
|
||||
@NotNull(message = "路由id不能为空")
|
||||
@NotEmpty(message = "路由id不能为空")
|
||||
private List<Long> routerIds;
|
||||
|
||||
@Schema(name = "roleIds", title = "角色id列表")
|
||||
@NotNull(message = "角色id列表不能为空")
|
||||
@NotEmpty(message = "角色id列表不能为空")
|
||||
private List<Long> roleIds;
|
||||
|
||||
}
|
|
@ -1,8 +1,7 @@
|
|||
package cn.bunny.domain.system.dto.router;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import cn.bunny.domain.system.entity.RouterMeta;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
@ -17,46 +16,29 @@ import lombok.NoArgsConstructor;
|
|||
@Schema(name = "RouterManageDto对象", title = "添加路由", description = "添加路由")
|
||||
public class RouterAddDto {
|
||||
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
@NotNull(message = "菜单类型不能为空")
|
||||
private Integer menuType;
|
||||
|
||||
@Schema(name = "parentId", title = "父级id")
|
||||
private Long parentId;
|
||||
|
||||
@Schema(name = "title", title = "路由title")
|
||||
@NotNull(message = "菜单名称不能为空")
|
||||
@NotBlank(message = "菜单名称不能为空")
|
||||
private String title;
|
||||
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
@JsonProperty("name")
|
||||
@NotBlank(message = "路由名称不能为空")
|
||||
@NotNull(message = "路由名称不能为空")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "path", title = "在项目中路径")
|
||||
@NotBlank(message = "路由路径不能为空")
|
||||
@NotNull(message = "路由路径不能为空")
|
||||
private String path;
|
||||
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
@NotBlank(message = "路由名称不能为空")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "redirect", title = "路由重定向")
|
||||
private String redirect;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "routerRank", title = "等级")
|
||||
@JsonProperty("rank")
|
||||
@NotNull(message = "菜单排序不能为空")
|
||||
@Max(value = 999, message = "不能超过999")
|
||||
private Integer routerRank = 99;
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
@NotNull(message = "菜单类型不能为空")
|
||||
private Integer menuType;
|
||||
|
||||
@Schema(name = "icon", title = "图标")
|
||||
private String icon;
|
||||
|
||||
@Schema(name = "frameSrc", title = "frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
@Schema(name = "visible", title = "是否显示")
|
||||
private Boolean visible = false;
|
||||
@Schema(name = "meta", title = "菜单meta")
|
||||
private RouterMeta meta;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
package cn.bunny.domain.system.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;
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
package cn.bunny.domain.system.dto.router;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@Schema(name = "RouterUpdateByIdWithRankDto对象", title = "根据菜单Id更新菜单排序", description = "根据菜单Id更新菜单排序")
|
||||
public class RouterUpdateByIdWithRankDto {
|
||||
|
||||
@Schema(name = "id", title = "唯一标识")
|
||||
@NotNull(message = "id不能为空")
|
||||
private Long id;
|
||||
|
||||
@Schema(name = "routerRank", title = "等级")
|
||||
@JsonProperty("rank")
|
||||
private Integer routerRank;
|
||||
|
||||
}
|
|
@ -1,8 +1,7 @@
|
|||
package cn.bunny.domain.system.dto.router;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import cn.bunny.domain.system.entity.RouterMeta;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import jakarta.validation.constraints.Max;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
@ -21,44 +20,29 @@ public class RouterUpdateDto {
|
|||
@NotNull(message = "id不能为空")
|
||||
private Long id;
|
||||
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
@NotNull(message = "菜单类型不能为空")
|
||||
private Integer menuType;
|
||||
|
||||
@Schema(name = "parentId", title = "父级id")
|
||||
private Long parentId;
|
||||
|
||||
@Schema(name = "title", title = "路由title")
|
||||
@NotBlank(message = "菜单名称不能为空")
|
||||
@NotNull(message = "菜单名称不能为空")
|
||||
private String title;
|
||||
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
@JsonProperty("name")
|
||||
@NotBlank(message = "路由名称不能为空")
|
||||
@NotNull(message = "路由名称不能为空")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "path", title = "在项目中路径")
|
||||
@NotBlank(message = "路由路径不能为空")
|
||||
@NotNull(message = "路由路径不能为空")
|
||||
private String path;
|
||||
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
@NotBlank(message = "路由名称不能为空")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "redirect", title = "路由重定向")
|
||||
private String redirect;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "routerRank", title = "等级")
|
||||
@JsonProperty("rank")
|
||||
@Max(value = 999, message = "不能超过999")
|
||||
private Integer routerRank;
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
@NotNull(message = "菜单类型不能为空")
|
||||
private Integer menuType;
|
||||
|
||||
@Schema(name = "icon", title = "图标")
|
||||
private String icon;
|
||||
@Schema(name = "meta", title = "菜单meta")
|
||||
private RouterMeta meta;
|
||||
|
||||
@Schema(name = "frameSrc", title = "frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
@Schema(name = "visible", title = "是否显示")
|
||||
private Boolean visible;
|
||||
}
|
||||
|
||||
|
|
|
@ -68,5 +68,6 @@ public class AdminUser extends BaseEntity implements UserDetails {
|
|||
public Collection<? extends GrantedAuthority> getAuthorities() {
|
||||
return authorities;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@ import lombok.Setter;
|
|||
|
||||
@Getter
|
||||
@Setter
|
||||
@TableName("sys_power")
|
||||
@TableName("sys_permission")
|
||||
@Schema(name = "Power对象", title = "权限", description = "权限")
|
||||
public class Power extends BaseEntity {
|
||||
public class Permission extends BaseEntity {
|
||||
|
||||
@Schema(name = "parentId", title = "父级id")
|
||||
private Long parentId;
|
|
@ -12,9 +12,9 @@ import lombok.experimental.Accessors;
|
|||
@Getter
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Accessors(chain = true)
|
||||
@TableName("sys_role_power")
|
||||
@TableName("sys_role_permission")
|
||||
@Schema(name = "RolePower对象", title = "角色权限关系", description = "角色权限关系")
|
||||
public class RolePower extends BaseEntity {
|
||||
public class RolePermission extends BaseEntity {
|
||||
|
||||
@Schema(name = "roleId", title = "角色id")
|
||||
private Long roleId;
|
|
@ -28,28 +28,20 @@ public class Router extends BaseEntity {
|
|||
@Schema(name = "path", title = "在项目中路径")
|
||||
private String path;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "frameSrc", title = "frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "title", title = "路由title")
|
||||
private String title;
|
||||
@Schema(name = "redirect", title = "路由重定向")
|
||||
private String redirect;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
private Integer menuType;
|
||||
|
||||
@Schema(name = "icon", title = "图标")
|
||||
private String icon;
|
||||
|
||||
@Schema(name = "routerRank", title = "等级")
|
||||
private Integer routerRank;
|
||||
|
||||
@Schema(name = "visible", title = "是否显示")
|
||||
private Boolean visible;
|
||||
@Schema(name = "meta", title = "路由meta")
|
||||
private String meta;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
package cn.bunny.domain.system.entity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RouterMeta {
|
||||
|
||||
@Schema(name = "title", title = "路由title")
|
||||
private String title = "";
|
||||
|
||||
@Schema(name = "icon", title = "图标")
|
||||
private String icon;
|
||||
|
||||
@Schema(name = "showLink", title = "是否显示菜单")
|
||||
private Boolean showLink = true;
|
||||
|
||||
@Schema(name = "showParent", title = "是否显示父级菜单")
|
||||
private Boolean showParent = true;
|
||||
|
||||
@Schema(name = "roles", title = "页面级别权限设置")
|
||||
private List<String> roles = new ArrayList<>();
|
||||
|
||||
@Schema(name = "auths", title = "按钮级别权限设置")
|
||||
private List<String> auths = new ArrayList<>();
|
||||
|
||||
@Schema(name = "keepAlive", title = "是否缓存该路由页面(开启后,会保存该页面的整体状态,刷新后会清空状态)")
|
||||
private Boolean keepAlive;
|
||||
|
||||
@Schema(name = "frameSrc", title = "frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
@Schema(name = "frameLoading", title = "等级")
|
||||
private Boolean frameLoading;
|
||||
|
||||
@Schema(name = "rank", title = "等级")
|
||||
private Integer rank;
|
||||
|
||||
@Schema(name = "fixedTag", title = "固定标签页")
|
||||
private Boolean fixedTag;
|
||||
|
||||
@Schema(name = "hiddenTag", title = "当前菜单名称或自定义信息禁止添加到标签页")
|
||||
private Boolean hiddenTag;
|
||||
|
||||
@Schema(name = "activePath", title = "将某个菜单激活")
|
||||
private String activePath;
|
||||
|
||||
@Schema(name = "transition", title = "页面加载动画")
|
||||
private RouterMetaTransition transition;
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
package cn.bunny.domain.system.entity;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class RouterMetaTransition {
|
||||
|
||||
@Schema(name = "enterTransition", title = "入场动画")
|
||||
private String enterTransition;
|
||||
|
||||
@Schema(name = "leaveTransition", title = "离场动画")
|
||||
private String leaveTransition;
|
||||
|
||||
}
|
|
@ -19,4 +19,5 @@ public class RouterRole extends BaseEntity {
|
|||
|
||||
@Schema(name = "roleId", title = "角色ID")
|
||||
private Long roleId;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package cn.bunny.domain.views;
|
||||
package cn.bunny.domain.system.views;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
@ -9,9 +9,9 @@ import lombok.experimental.Accessors;
|
|||
@Setter
|
||||
@Getter
|
||||
@Accessors(chain = true)
|
||||
@TableName("sys_role_power")
|
||||
@TableName("sys_role_permission")
|
||||
@Schema(name = "ViewRolePower对象", title = "角色权限关系视图", description = "角色权限关系视图")
|
||||
public class ViewRolePower {
|
||||
public class ViewRolePermission {
|
||||
|
||||
@Schema(name = "roleId", title = "角色ID")
|
||||
private Long roleId;
|
|
@ -1,4 +1,4 @@
|
|||
package cn.bunny.domain.views;
|
||||
package cn.bunny.domain.system.views;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
@ -22,29 +22,20 @@ public class ViewRouterRole {
|
|||
@Schema(name = "path", title = "在项目中路径")
|
||||
private String path;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "frameSrc", title = "frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "title", title = "路由title")
|
||||
private String title;
|
||||
@Schema(name = "redirect", title = "路由重定向")
|
||||
private String redirect;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
private Integer menuType;
|
||||
|
||||
@Schema(name = "icon", title = "图标")
|
||||
private String icon;
|
||||
|
||||
@Schema(name = "routerRank", title = "等级")
|
||||
private Integer routerRank;
|
||||
|
||||
@Schema(name = "visible", title = "是否显示")
|
||||
private Boolean visible;
|
||||
@Schema(name = "meta", title = "路由meta")
|
||||
private String meta;
|
||||
|
||||
@Schema(name = "roleId", title = "角色ID")
|
||||
private Long roleId;
|
|
@ -1,4 +1,4 @@
|
|||
package cn.bunny.domain.views;
|
||||
package cn.bunny.domain.system.views;
|
||||
|
||||
import cn.bunny.domain.entity.BaseUserEntity;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
@ -36,7 +36,7 @@ public class ViewUserDept extends BaseUserEntity {
|
|||
|
||||
@Schema(name = "password", title = "密码")
|
||||
private String password;
|
||||
|
||||
|
||||
@Schema(name = "avatar", title = "头像")
|
||||
private String avatar;
|
||||
|
|
@ -5,11 +5,11 @@ 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;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
|
@ -17,7 +17,7 @@ import java.util.List;
|
|||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(value = "RouterControllerVo对象", description = "路由管理端返回对象")
|
||||
@Schema(name = "RouterControllerVo对象", title = "管理员用户看到菜单内容", description = "管理员用户管理菜单")
|
||||
public class RouterManageVo extends BaseUserVo {
|
||||
|
||||
@ApiModelProperty("父级id")
|
||||
|
@ -26,36 +26,67 @@ public class RouterManageVo extends BaseUserVo {
|
|||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
private Long parentId;
|
||||
|
||||
@ApiModelProperty("在项目中路径")
|
||||
@Schema(name = "path", title = "在项目中路径")
|
||||
private String path;
|
||||
|
||||
@ApiModelProperty("组件位置")
|
||||
private String component;
|
||||
|
||||
@ApiModelProperty("frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
@ApiModelProperty("路由名称")
|
||||
@NotBlank(message = "路由名称不能为空")
|
||||
@JsonProperty("name")
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
private String routeName;
|
||||
|
||||
@ApiModelProperty("路由title")
|
||||
private String title;
|
||||
@Schema(name = "redirect", title = "路由重定向")
|
||||
private String redirect;
|
||||
|
||||
@ApiModelProperty("菜单类型")
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
private Integer menuType;
|
||||
|
||||
@ApiModelProperty("图标")
|
||||
@Schema(name = "title", title = "路由title")
|
||||
private String title;
|
||||
|
||||
@Schema(name = "icon", title = "图标")
|
||||
private String icon;
|
||||
|
||||
@ApiModelProperty("等级")
|
||||
@JsonProperty("rank")
|
||||
private Integer routerRank;
|
||||
@Schema(name = "showLink", title = "是否显示菜单")
|
||||
private Boolean showLink;
|
||||
|
||||
@ApiModelProperty("是否显示")
|
||||
private Boolean visible;
|
||||
@Schema(name = "showParent", title = "是否显示父级菜单")
|
||||
private Boolean showParent;
|
||||
|
||||
@Schema(name = "roles", title = "页面级别权限设置")
|
||||
private List<String> roles;
|
||||
|
||||
@Schema(name = "auths", title = "按钮级别权限设置")
|
||||
private List<String> auths;
|
||||
|
||||
@Schema(name = "keepAlive", title = "是否缓存该路由页面(开启后,会保存该页面的整体状态,刷新后会清空状态)")
|
||||
private Boolean keepAlive;
|
||||
|
||||
@Schema(name = "frameSrc", title = "frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
@Schema(name = "frameLoading", title = "等级")
|
||||
private Boolean frameLoading;
|
||||
|
||||
@Schema(name = "rank", title = "等级")
|
||||
private Integer rank;
|
||||
|
||||
@Schema(name = "hiddenTag", title = "当前菜单名称或自定义信息禁止添加到标签页")
|
||||
private Boolean hiddenTag;
|
||||
|
||||
@Schema(name = "fixedTag", title = "固定标签页")
|
||||
private Boolean fixedTag;
|
||||
|
||||
@Schema(name = "activePath", title = "将某个菜单激活")
|
||||
private String activePath;
|
||||
|
||||
@Schema(name = "enterTransition", title = "入场动画")
|
||||
private String enterTransition;
|
||||
|
||||
@Schema(name = "leaveTransition", title = "离场动画")
|
||||
private String leaveTransition;
|
||||
|
||||
@ApiModelProperty("子路由")
|
||||
private List<RouterManageVo> children;
|
||||
private List<RouterManageVo> children = new ArrayList<>();
|
||||
}
|
||||
|
|
|
@ -1,37 +0,0 @@
|
|||
package cn.bunny.domain.system.vo.router;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(value = "UserRouterMetaVo对象", description = "系统属性内容")
|
||||
public class RouterMeta {
|
||||
|
||||
@ApiModelProperty(value = "图标")
|
||||
private String icon;
|
||||
|
||||
@ApiModelProperty(value = "标题")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty(value = "排序权重")
|
||||
private Integer rank;
|
||||
|
||||
@ApiModelProperty(value = "角色列表")
|
||||
private List<String> roles;
|
||||
|
||||
@ApiModelProperty(value = "权限列表")
|
||||
private List<String> auths;
|
||||
|
||||
@ApiModelProperty("frame路径")
|
||||
private String frameSrc;
|
||||
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
package cn.bunny.domain.system.vo.router;
|
||||
|
||||
import cn.bunny.domain.vo.BaseUserVo;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.*;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Schema(name = "RouterVo对象", title = "Router返回对象,含用户名等继承 BaseUserVo", description = "Router返回对象包含用户名等返回信息")
|
||||
public class RouterVo extends BaseUserVo {
|
||||
|
||||
@Schema(name = "parentId", title = "父级id")
|
||||
private Long parentId;
|
||||
|
||||
@Schema(name = "path", title = "在项目中路径")
|
||||
private String path;
|
||||
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "redirect", title = "路由重定向")
|
||||
private String redirect;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
private Integer menuType;
|
||||
|
||||
@Schema(name = "meta", title = "路由meta")
|
||||
private String meta;
|
||||
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
package cn.bunny.domain.system.vo.router;
|
||||
|
||||
import cn.bunny.domain.system.entity.RouterMeta;
|
||||
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;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.AllArgsConstructor;
|
||||
|
@ -18,8 +18,8 @@ import java.util.List;
|
|||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@ApiModel(value = "UserRouterVo对象", description = "系统菜单表")
|
||||
public class UserRouterVo {
|
||||
@Schema(name = "UserRouterVo对象", title = "前端用户显示路由菜单", description = "前端展示侧边栏和用户菜单内容")
|
||||
public class WebUserRouterVo {
|
||||
|
||||
@Schema(name = "id", title = "主键")
|
||||
@JsonProperty("id")
|
||||
|
@ -27,35 +27,32 @@ public class UserRouterVo {
|
|||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
private Long id;
|
||||
|
||||
@ApiModelProperty("菜单类型")
|
||||
private Integer menuType;
|
||||
|
||||
@ApiModelProperty("父级id")
|
||||
@JsonProperty("parentId")
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING)
|
||||
@JSONField(serializeUsing = ToStringSerializer.class)
|
||||
@Schema(name = "parentId", title = "父级id")
|
||||
private Long parentId;
|
||||
|
||||
@ApiModelProperty("菜单名称")
|
||||
private String title;
|
||||
|
||||
@ApiModelProperty("路由名称")
|
||||
@JsonProperty("name")
|
||||
private String routeName;
|
||||
|
||||
@ApiModelProperty("在项目中路径")
|
||||
@Schema(name = "path", title = "在项目中路径")
|
||||
private String path;
|
||||
|
||||
@ApiModelProperty("组件位置")
|
||||
@JsonProperty("name")
|
||||
@Schema(name = "routeName", title = "路由名称")
|
||||
private String routeName;
|
||||
|
||||
@Schema(name = "redirect", title = "路由重定向")
|
||||
private String redirect;
|
||||
|
||||
@Schema(name = "component", title = "组件位置")
|
||||
private String component;
|
||||
|
||||
@ApiModelProperty("等级")
|
||||
@JsonProperty("rank")
|
||||
private Integer routerRank;
|
||||
@Schema(name = "menuType", title = "菜单类型")
|
||||
private Integer menuType;
|
||||
|
||||
@ApiModelProperty("路由Meta")
|
||||
@Schema(name = "meta", title = "路由meta")
|
||||
private RouterMeta meta;
|
||||
|
||||
@ApiModelProperty("子路由")
|
||||
private List<UserRouterVo> children;
|
||||
private List<WebUserRouterVo> children;
|
||||
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package cn.bunny.services.mapper.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.Power;
|
||||
import cn.bunny.domain.system.dto.power.PowerDto;
|
||||
import cn.bunny.domain.system.entity.Permission;
|
||||
import cn.bunny.domain.system.vo.PowerVo;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
|
@ -20,7 +20,7 @@ import java.util.List;
|
|||
* @since 2024-10-03 16:00:52
|
||||
*/
|
||||
@Mapper
|
||||
public interface PowerMapper extends BaseMapper<Power> {
|
||||
public interface PowerMapper extends BaseMapper<Permission> {
|
||||
|
||||
/**
|
||||
* * 分页查询权限内容
|
||||
|
@ -29,7 +29,7 @@ public interface PowerMapper extends BaseMapper<Power> {
|
|||
* @param dto 权限查询表单
|
||||
* @return 权限分页结果
|
||||
*/
|
||||
IPage<PowerVo> selectListByPage(@Param("page") Page<Power> pageParams, @Param("dto") PowerDto dto);
|
||||
IPage<PowerVo> selectListByPage(@Param("page") Page<Permission> pageParams, @Param("dto") PowerDto dto);
|
||||
|
||||
/**
|
||||
* 物理删除权限
|
||||
|
@ -43,6 +43,6 @@ public interface PowerMapper extends BaseMapper<Power> {
|
|||
*
|
||||
* @param userId 用户id
|
||||
*/
|
||||
List<Power> selectListByUserId(long userId);
|
||||
List<Permission> selectListByUserId(long userId);
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.bunny.services.mapper.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.RolePower;
|
||||
import cn.bunny.domain.views.ViewRolePower;
|
||||
import cn.bunny.domain.system.entity.RolePermission;
|
||||
import cn.bunny.domain.system.views.ViewRolePermission;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
@ -16,7 +16,7 @@ import java.util.List;
|
|||
* @since 2024-09-26
|
||||
*/
|
||||
@Mapper
|
||||
public interface RolePowerMapper extends BaseMapper<RolePower> {
|
||||
public interface RolePermissionMapper extends BaseMapper<RolePermission> {
|
||||
|
||||
/**
|
||||
* * 根据权限id列表删除角色权限相关
|
||||
|
@ -38,12 +38,12 @@ public interface RolePowerMapper extends BaseMapper<RolePower> {
|
|||
* @param roleId 角色id
|
||||
* @return 已选择的权限列表
|
||||
*/
|
||||
List<RolePower> selectPowerListByRoleId(Long roleId);
|
||||
List<RolePermission> selectPowerListByRoleId(Long roleId);
|
||||
|
||||
/**
|
||||
* 查看所有角色关联的权限
|
||||
*
|
||||
* @return 角色权限关系视图
|
||||
*/
|
||||
List<ViewRolePower> viewRolePowerWithAll();
|
||||
List<ViewRolePermission> viewRolePowerWithAll();
|
||||
}
|
|
@ -2,13 +2,9 @@ package cn.bunny.services.mapper.system;
|
|||
|
||||
|
||||
import cn.bunny.domain.system.entity.Router;
|
||||
import cn.bunny.domain.system.dto.router.RouterManageDto;
|
||||
import cn.bunny.domain.system.vo.router.RouterManageVo;
|
||||
import cn.bunny.domain.system.vo.router.RouterVo;
|
||||
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;
|
||||
|
||||
|
@ -24,42 +20,16 @@ import java.util.List;
|
|||
public interface RouterMapper extends BaseMapper<Router> {
|
||||
|
||||
/**
|
||||
* * 根据用户id查找路由内容
|
||||
*
|
||||
* @param userId 用户id
|
||||
* @return 路由列表
|
||||
*/
|
||||
List<Long> selectListByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* * 递归查询所有父级Id,直到查询到父级Id为0
|
||||
*
|
||||
* @param ids id列表
|
||||
* @return 路由列表
|
||||
*/
|
||||
List<Router> selectParentListByRouterId(List<Long> ids);
|
||||
|
||||
/**
|
||||
* * 管理菜单列表
|
||||
*
|
||||
* @param pageParams 分页想去
|
||||
* @param dto 路由查询表单
|
||||
* @return 分页结果
|
||||
*/
|
||||
IPage<RouterManageVo> selectListByPage(@Param("page") Page<Router> pageParams, @Param("dto") RouterManageDto dto);
|
||||
|
||||
/**
|
||||
* * 管理菜单列表不分页
|
||||
*
|
||||
* @param dto 路由查询表单
|
||||
* @return 分页结果
|
||||
*/
|
||||
List<RouterManageVo> selectAllList(@Param("dto") RouterManageDto dto);
|
||||
|
||||
/**
|
||||
* * 物理删除路由菜单
|
||||
* 物理删除路由菜单
|
||||
*
|
||||
* @param ids 删除id列表
|
||||
*/
|
||||
void deleteBatchIdsWithPhysics(List<Long> ids);
|
||||
|
||||
/**
|
||||
* 查询路由列表
|
||||
*
|
||||
* @return 用户、时间
|
||||
*/
|
||||
List<RouterVo> selectMenuList();
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.bunny.services.mapper.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.RouterRole;
|
||||
import cn.bunny.domain.views.ViewRouterRole;
|
||||
import cn.bunny.domain.system.views.ViewRouterRole;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
|
@ -19,30 +19,31 @@ import java.util.List;
|
|||
public interface RouterRoleMapper extends BaseMapper<RouterRole> {
|
||||
|
||||
/**
|
||||
* 根据路由id删除所有角色和路由信息
|
||||
* 查看所有路由关联角色
|
||||
*
|
||||
* @param routerIds 路由id
|
||||
* @return 路由角色关系视图列表
|
||||
*/
|
||||
void deleteBatchIdsByRouterIdsWithPhysics(List<Long> routerIds);
|
||||
List<ViewRouterRole> selectRouterRoleList();
|
||||
|
||||
/**
|
||||
* * 根据角色id列表删除角色和路由相关
|
||||
* 根据【路由id】删除所有角色和路由信息
|
||||
*
|
||||
* @param ids 路由id
|
||||
*/
|
||||
void deleteBatchIdsByRouterIdsWithPhysics(List<Long> ids);
|
||||
|
||||
/**
|
||||
* * 根据【角色id】列表删除角色和路由相关
|
||||
*
|
||||
* @param roleIds 角色id列表
|
||||
*/
|
||||
void deleteBatchIdsByRoleIdsWithPhysics(List<Long> roleIds);
|
||||
|
||||
/**
|
||||
* 查看所有路由关联角色
|
||||
*
|
||||
* @return 路由角色关系视图列表
|
||||
*/
|
||||
List<ViewRouterRole> viewRouterRolesWithAll();
|
||||
|
||||
/**
|
||||
* 根据Id列表物理删除路由角色关系表
|
||||
* 根据【Id列表】物理删除路由角色关系表
|
||||
*
|
||||
* @param ids 路由角色关系表ids
|
||||
*/
|
||||
void deleteBatchIdsWithPhysics(List<Long> ids);
|
||||
}
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ package cn.bunny.services.mapper.system;
|
|||
|
||||
import cn.bunny.domain.system.dto.user.AdminUserDto;
|
||||
import cn.bunny.domain.system.entity.AdminUser;
|
||||
import cn.bunny.domain.views.ViewUserDept;
|
||||
import cn.bunny.domain.system.views.ViewUserDept;
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<mapper namespace="cn.bunny.services.mapper.system.PowerMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="cn.bunny.domain.system.entity.Power">
|
||||
<resultMap id="BaseResultMap" type="cn.bunny.domain.system.entity.Permission">
|
||||
<id column="id" property="id"/>
|
||||
<id column="create_time" property="createTime"/>
|
||||
<id column="update_time" property="updateTime"/>
|
||||
|
@ -25,22 +25,22 @@
|
|||
<!-- 分页查询权限内容 -->
|
||||
<select id="selectListByPage" resultType="cn.bunny.domain.system.vo.PowerVo">
|
||||
select
|
||||
power.*,
|
||||
permission.*,
|
||||
create_user.username as create_username,
|
||||
update_user.username as update_username
|
||||
from sys_power power
|
||||
left join sys_user create_user on create_user.id = power.create_user
|
||||
left join sys_user update_user on update_user.id = power.update_user
|
||||
from sys_permission permission
|
||||
left join sys_user create_user on create_user.id = permission.create_user
|
||||
left join sys_user update_user on update_user.id = permission.update_user
|
||||
<where>
|
||||
power.is_deleted = 0
|
||||
permission.is_deleted = 0
|
||||
<if test="dto.powerCode != null and dto.powerCode != ''">
|
||||
and power.power_code like CONCAT('%',#{dto.powerCode},'%')
|
||||
and permission.power_code like CONCAT('%',#{dto.powerCode},'%')
|
||||
</if>
|
||||
<if test="dto.powerName != null and dto.powerName != ''">
|
||||
and power.power_name like CONCAT('%',#{dto.powerName},'%')
|
||||
and permission.power_name like CONCAT('%',#{dto.powerName},'%')
|
||||
</if>
|
||||
<if test="dto.requestUrl != null and dto.requestUrl != ''">
|
||||
and power.request_url like CONCAT('%',#{dto.requestUrl},'%')
|
||||
and permission.request_url like CONCAT('%',#{dto.requestUrl},'%')
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
@ -48,7 +48,7 @@
|
|||
<!-- 物理删除权限 -->
|
||||
<delete id="deleteBatchIdsWithPhysics">
|
||||
delete
|
||||
from sys_power
|
||||
from sys_permission
|
||||
where id in
|
||||
<foreach collection="ids" item="id" open="(" close=")" separator=",">
|
||||
#{id}
|
||||
|
@ -56,16 +56,16 @@
|
|||
</delete>
|
||||
|
||||
<!-- 根据用户id查询当前用户所有权限 -->
|
||||
<select id="selectListByUserId" resultType="cn.bunny.domain.system.entity.Power">
|
||||
<select id="selectListByUserId" resultType="cn.bunny.domain.system.entity.Permission">
|
||||
SELECT p.*
|
||||
FROM sys_user u,
|
||||
sys_user_role ur,
|
||||
sys_role_power rp,
|
||||
sys_power p
|
||||
sys_user_role ur,
|
||||
sys_role_permission rp,
|
||||
sys_permission p
|
||||
WHERE u.id = ur.user_id
|
||||
AND u.is_deleted = 0
|
||||
AND ur.role_id = rp.role_id
|
||||
AND rp.power_id = p.id
|
||||
AND u.id = #{userId}
|
||||
AND u.is_deleted = 0
|
||||
AND ur.role_id = rp.role_id
|
||||
AND rp.power_id = p.id
|
||||
AND u.id = #{userId}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cn.bunny.services.mapper.system.RolePowerMapper">
|
||||
<mapper namespace="cn.bunny.services.mapper.system.RolePermissionMapper">
|
||||
|
||||
<!-- 通用查询映射结果 -->
|
||||
<resultMap id="BaseResultMap" type="cn.bunny.domain.system.entity.RolePower">
|
||||
<resultMap id="BaseResultMap" type="cn.bunny.domain.system.entity.RolePermission">
|
||||
<id column="id" property="id"/>
|
||||
<result column="role_id" property="roleId"/>
|
||||
<result column="power_id" property="powerId"/>
|
||||
|
@ -22,7 +22,7 @@
|
|||
<!-- 根据权限id列表删除角色权限相关 -->
|
||||
<delete id="deleteBatchPowerIdsWithPhysics">
|
||||
delete
|
||||
from sys_role_power
|
||||
from sys_role_permission
|
||||
where power_id in
|
||||
<foreach collection="powerIds" item="id" open="(" close=")" separator=",">
|
||||
#{id}
|
||||
|
@ -32,7 +32,7 @@
|
|||
<!-- 根据角色id删除角色权限 -->
|
||||
<delete id="deleteBatchRoleIdsWithPhysics">
|
||||
delete
|
||||
from sys_role_power
|
||||
from sys_role_permission
|
||||
where role_id in
|
||||
<foreach collection="roleIds" item="id" open="(" close=")" separator=",">
|
||||
#{id}
|
||||
|
@ -40,25 +40,25 @@
|
|||
</delete>
|
||||
|
||||
<!-- 根据角色id获取权限内容 -->
|
||||
<select id="selectPowerListByRoleId" resultType="cn.bunny.domain.system.entity.RolePower">
|
||||
<select id="selectPowerListByRoleId" resultType="cn.bunny.domain.system.entity.RolePermission">
|
||||
select *
|
||||
from sys_role_power
|
||||
from sys_role_permission
|
||||
where role_id = #{roleId}
|
||||
</select>
|
||||
|
||||
<!-- 查看所有角色关联的权限 -->
|
||||
<select id="viewRolePowerWithAll" resultType="cn.bunny.domain.views.ViewRolePower">
|
||||
<select id="viewRolePowerWithAll" resultType="cn.bunny.domain.system.views.ViewRolePermission">
|
||||
SELECT rp.power_id,
|
||||
power.parent_id,
|
||||
power.power_code,
|
||||
power.power_name,
|
||||
power.request_url,
|
||||
permission.parent_id,
|
||||
permission.power_code,
|
||||
permission.power_name,
|
||||
permission.request_url,
|
||||
rp.role_id,
|
||||
role.role_code,
|
||||
role.description
|
||||
FROM sys_role_power rp
|
||||
FROM sys_role_permission rp
|
||||
LEFT JOIN sys_role role ON rp.role_id = role.id
|
||||
LEFT JOIN sys_power power ON rp.power_id = power.id
|
||||
LEFT JOIN sys_permission permission ON rp.power_id = permission.id
|
||||
</select>
|
||||
|
||||
</mapper>
|
|
@ -8,13 +8,9 @@
|
|||
<result column="parent_id" property="parentId"/>
|
||||
<result column="path" property="path"/>
|
||||
<result column="component" property="component"/>
|
||||
<result column="frame_src" property="frameSrc"/>
|
||||
<result column="route_name" property="routeName"/>
|
||||
<result column="title" property="title"/>
|
||||
<result column="menu_type" property="menuType"/>
|
||||
<result column="icon" property="icon"/>
|
||||
<result column="router_rank" property="routerRank"/>
|
||||
<result column="visible" property="visible"/>
|
||||
<result column="meta" property="meta"/>
|
||||
<result column="create_user" property="createUser"/>
|
||||
<result column="update_user" property="updateUser"/>
|
||||
<result column="update_time" property="updateTime"/>
|
||||
|
@ -24,7 +20,7 @@
|
|||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
id, parent_id, path, component, frame_src, route_name, title, menu_type, icon, router_rank, visible, create_user, update_user, update_time, create_time, is_deleted
|
||||
id, parent_id, path, component, route_name, menu_type, meta, create_user, update_user, update_time, create_time, is_deleted
|
||||
</sql>
|
||||
|
||||
<!-- 物理删除路由菜单 -->
|
||||
|
@ -37,58 +33,8 @@
|
|||
</foreach>
|
||||
</delete>
|
||||
|
||||
<!-- 根据用户ID查找路由列表 -->
|
||||
<select id="selectListByUserId" resultType="java.lang.Long">
|
||||
SELECT router.id
|
||||
FROM sys_user_role user_role
|
||||
LEFT JOIN sys_user user ON user_role.user_id = user.id
|
||||
LEFT JOIN sys_router_role router_role ON user_role.role_id = router_role.role_id
|
||||
LEFT JOIN sys_router router ON router_role.router_id = router.id
|
||||
WHERE user.is_deleted = 0
|
||||
AND user.id = #{userId}
|
||||
</select>
|
||||
|
||||
<!-- 递归查询所有父级Id,直到查询到父级Id为0 -->
|
||||
<select id="selectParentListByRouterId" resultType="cn.bunny.domain.system.entity.Router">
|
||||
WITH RECURSIVE ParentChain AS (
|
||||
SELECT * FROM sys_router
|
||||
WHERE id IN
|
||||
<foreach collection="ids" item="id" open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
UNION ALL
|
||||
SELECT r.* FROM sys_router r
|
||||
INNER JOIN ParentChain pc ON r.id = pc.parent_id
|
||||
)
|
||||
SELECT
|
||||
<include refid="Base_Column_List"/>
|
||||
FROM ParentChain;
|
||||
</select>
|
||||
|
||||
<!-- 管理菜单列表 -->
|
||||
<select id="selectListByPage" resultType="cn.bunny.domain.system.vo.router.RouterManageVo">
|
||||
select
|
||||
router.*,
|
||||
create_user.username as create_username,
|
||||
update_user.username as update_username
|
||||
from sys_router router
|
||||
left join sys_user create_user on create_user.id = router.create_user
|
||||
left join sys_user update_user on update_user.id = router.update_user
|
||||
<where>
|
||||
role.is_deleted = 0
|
||||
<if test="dto.title != null and dto.title != ''">
|
||||
and router.title like CONCAT('%',#{dto.title},'%')
|
||||
</if>
|
||||
<if test="dto.visible != null">
|
||||
and router.visible = #{dto.visible}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
|
||||
<!-- 管理菜单列表不分页 -->
|
||||
<select id="selectAllList" resultType="cn.bunny.domain.system.vo.router.RouterManageVo">
|
||||
select
|
||||
router.*,
|
||||
<select id="selectMenuList" resultType="cn.bunny.domain.system.vo.router.RouterVo">
|
||||
select router.*,
|
||||
create_user.username as create_username,
|
||||
update_user.username as update_username
|
||||
from sys_router router
|
||||
|
@ -96,12 +42,6 @@
|
|||
left join sys_user update_user on update_user.id = router.update_user
|
||||
<where>
|
||||
router.is_deleted = 0
|
||||
<if test="dto.title != null and dto.title != ''">
|
||||
and router.title like CONCAT('%',#{dto.title},'%')
|
||||
</if>
|
||||
<if test="dto.visible != null">
|
||||
and router.visible = #{dto.visible}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
delete
|
||||
from sys_router_role
|
||||
where router_id in
|
||||
<foreach collection="routerIds" item="id" open="(" close=")" separator=",">
|
||||
<foreach collection="ids" item="id" open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
@ -50,18 +50,15 @@
|
|||
</delete>
|
||||
|
||||
<!-- 查看所有路由的角色 -->
|
||||
<select id="viewRouterRolesWithAll" resultType="cn.bunny.domain.views.ViewRouterRole">
|
||||
<select id="selectRouterRoleList" resultType="cn.bunny.domain.system.views.ViewRouterRole">
|
||||
SELECT rr.router_id,
|
||||
router.parent_id,
|
||||
router.path,
|
||||
router.component,
|
||||
router.frame_src,
|
||||
router.redirect,
|
||||
router.route_name,
|
||||
router.title,
|
||||
router.menu_type,
|
||||
router.icon,
|
||||
router.router_rank,
|
||||
router.visible,
|
||||
router.meta,
|
||||
rr.role_id,
|
||||
role.role_code,
|
||||
role.description
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
</sql>
|
||||
|
||||
<!-- 分页查询用户信息内容 -->
|
||||
<select id="selectListByPage" resultType="cn.bunny.domain.views.ViewUserDept">
|
||||
<select id="selectListByPage" resultType="cn.bunny.domain.system.views.ViewUserDept">
|
||||
select
|
||||
user.*,
|
||||
user_dept.dept_id,
|
||||
|
|
|
@ -6,13 +6,13 @@ import cn.bunny.domain.log.entity.ScheduleExecuteLog;
|
|||
import cn.bunny.domain.model.quartz.ScheduleExecuteLogJson;
|
||||
import cn.bunny.services.mapper.log.ScheduleExecuteLogMapper;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.aspectj.lang.ProceedingJoinPoint;
|
||||
import org.aspectj.lang.annotation.Around;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.aspectj.lang.annotation.Pointcut;
|
||||
import org.quartz.Job;
|
||||
import org.quartz.JobExecutionContext;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.time.Duration;
|
||||
|
@ -26,7 +26,7 @@ public class JobExecuteAspect {
|
|||
|
||||
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(LocalDateTimeConstant.YYYY_MM_DD_HH_MM_SS);
|
||||
|
||||
@Autowired
|
||||
@Resource
|
||||
private ScheduleExecuteLogMapper scheduleExecuteLogMapper;
|
||||
|
||||
@Around(value = "pointCut()")
|
||||
|
|
|
@ -8,7 +8,6 @@ import cn.bunny.services.service.configuration.I18nService;
|
|||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.read.listener.ReadListener;
|
||||
import com.alibaba.excel.util.ListUtils;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -73,7 +72,5 @@ public class I18nExcelListener implements ReadListener<I18nExcel> {
|
|||
throw new AuthCustomerException(ResultCodeEnum.DATA_TOO_LARGE);
|
||||
}
|
||||
i18nService.saveBatch(i18nList);
|
||||
|
||||
System.out.println(JSON.toJSONString(i18nList));
|
||||
}
|
||||
}
|
|
@ -27,7 +27,7 @@ public interface MenuIconService extends IService<MenuIcon> {
|
|||
*
|
||||
* @return 系统菜单图标返回列表
|
||||
*/
|
||||
PageResult<MenuIconVo> getMenuIconList(Page<MenuIcon> pageParams, MenuIconDto dto);
|
||||
PageResult<MenuIconVo> menuIconList(Page<MenuIcon> pageParams, MenuIconDto dto);
|
||||
|
||||
/**
|
||||
* * 添加系统菜单图标
|
||||
|
|
|
@ -203,7 +203,6 @@ public class I18nServiceImpl extends ServiceImpl<I18nMapper, I18n> implements I1
|
|||
// 判断是否有这个语言的key
|
||||
List<I18nType> i18nTypeList = i18nTypeMapper.selectList(Wrappers.<I18nType>lambdaQuery().eq(I18nType::getTypeName, type));
|
||||
if (i18nTypeList.isEmpty() && !file.isEmpty()) throw new AuthCustomerException(ResultCodeEnum.DATA_NOT_EXIST);
|
||||
|
||||
try {
|
||||
// 内容是否为空
|
||||
String content = new String(file.getBytes());
|
||||
|
|
|
@ -43,7 +43,7 @@ public class MenuIconServiceImpl extends ServiceImpl<MenuIconMapper, MenuIcon> i
|
|||
* @return 查询分页系统菜单图标返回对象
|
||||
*/
|
||||
@Override
|
||||
public PageResult<MenuIconVo> getMenuIconList(Page<MenuIcon> pageParams, MenuIconDto dto) {
|
||||
public PageResult<MenuIconVo> menuIconList(Page<MenuIcon> pageParams, MenuIconDto dto) {
|
||||
// 分页查询菜单图标
|
||||
IPage<MenuIconVo> page = baseMapper.selectListByPage(pageParams, dto);
|
||||
return PageResult.<MenuIconVo>builder()
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package cn.bunny.services.service.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.Power;
|
||||
import cn.bunny.domain.system.dto.power.PowerAddDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerUpdateBatchByParentIdDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerUpdateDto;
|
||||
import cn.bunny.domain.system.entity.Permission;
|
||||
import cn.bunny.domain.system.vo.PowerVo;
|
||||
import cn.bunny.domain.vo.result.PageResult;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
|
@ -21,14 +21,14 @@ import java.util.List;
|
|||
* @author Bunny
|
||||
* @since 2024-10-03 16:00:52
|
||||
*/
|
||||
public interface PowerService extends IService<Power> {
|
||||
public interface PowerService extends IService<Permission> {
|
||||
|
||||
/**
|
||||
* * 获取权限列表
|
||||
*
|
||||
* @return 权限返回列表
|
||||
*/
|
||||
PageResult<PowerVo> getPowerList(Page<Power> pageParams, PowerDto dto);
|
||||
PageResult<PowerVo> getPowerList(Page<Permission> pageParams, PowerDto dto);
|
||||
|
||||
/**
|
||||
* * 添加权限
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package cn.bunny.services.service.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.RolePower;
|
||||
import cn.bunny.domain.system.dto.AssignPowersToRoleDto;
|
||||
import cn.bunny.domain.system.entity.RolePermission;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
|
@ -15,7 +15,7 @@ import java.util.List;
|
|||
* @author Bunny
|
||||
* @since 2024-09-26
|
||||
*/
|
||||
public interface RolePowerService extends IService<RolePower> {
|
||||
public interface RolePowerService extends IService<RolePermission> {
|
||||
|
||||
/**
|
||||
* * 根据角色id获取权限内容
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package cn.bunny.services.service.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.RouterRole;
|
||||
import cn.bunny.domain.system.dto.router.AssignRolesToRoutersDto;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -24,24 +23,10 @@ public interface RouterRoleService extends IService<RouterRole> {
|
|||
*/
|
||||
List<String> getRoleListByRouterId(Long routerId);
|
||||
|
||||
/**
|
||||
* * 为菜单分配角色
|
||||
*
|
||||
* @param dto 路由分配角色
|
||||
*/
|
||||
void assignRolesToRouter(AssignRolesToRoutersDto dto);
|
||||
|
||||
/**
|
||||
* 清除选中菜单所有角色
|
||||
*
|
||||
* @param routerIds 路由id
|
||||
*/
|
||||
void clearAllRolesSelect(List<Long> routerIds);
|
||||
|
||||
/**
|
||||
* 批量为菜单添加角色
|
||||
*
|
||||
* @param dto 路由分配角色
|
||||
*/
|
||||
void assignAddBatchRolesToRouter(AssignRolesToRoutersDto dto);
|
||||
}
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
package cn.bunny.services.service.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.Router;
|
||||
import cn.bunny.domain.system.dto.router.RouterAddDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterManageDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterUpdateByIdWithRankDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterUpdateDto;
|
||||
import cn.bunny.domain.system.entity.Router;
|
||||
import cn.bunny.domain.system.vo.router.RouterManageVo;
|
||||
import cn.bunny.domain.system.vo.router.UserRouterVo;
|
||||
import cn.bunny.domain.vo.result.PageResult;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import cn.bunny.domain.system.vo.router.WebUserRouterVo;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import jakarta.validation.Valid;
|
||||
|
||||
|
@ -28,23 +24,14 @@ public interface RouterService extends IService<Router> {
|
|||
*
|
||||
* @return 路遇列表
|
||||
*/
|
||||
List<UserRouterVo> getRouterAsync();
|
||||
|
||||
/**
|
||||
* * 管理菜单列表
|
||||
*
|
||||
* @param pageParams 分页想去
|
||||
* @param dto 路由查询表单
|
||||
* @return 系统菜单表分页
|
||||
*/
|
||||
PageResult<RouterManageVo> getMenusByPage(Page<Router> pageParams, RouterManageDto dto);
|
||||
List<WebUserRouterVo> routerAsync();
|
||||
|
||||
/**
|
||||
* * 管理菜单列表
|
||||
*
|
||||
* @return 系统菜单表
|
||||
*/
|
||||
List<RouterManageVo> getMenusList(RouterManageDto dto);
|
||||
List<RouterManageVo> menuList();
|
||||
|
||||
/**
|
||||
* * 添加路由菜单
|
||||
|
@ -66,11 +53,4 @@ public interface RouterService extends IService<Router> {
|
|||
* @param ids 删除id列表
|
||||
*/
|
||||
void deletedMenuByIds(List<Long> ids);
|
||||
|
||||
/**
|
||||
* * 快速更新菜单排序
|
||||
*
|
||||
* @param dto 根据菜单Id更新菜单排序
|
||||
*/
|
||||
void updateMenuByIdWithRank(RouterUpdateByIdWithRankDto dto);
|
||||
}
|
||||
|
|
|
@ -4,13 +4,13 @@ import cn.bunny.domain.system.dto.power.PowerAddDto;
|
|||
import cn.bunny.domain.system.dto.power.PowerDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerUpdateBatchByParentIdDto;
|
||||
import cn.bunny.domain.system.dto.power.PowerUpdateDto;
|
||||
import cn.bunny.domain.system.entity.Power;
|
||||
import cn.bunny.domain.system.entity.Permission;
|
||||
import cn.bunny.domain.system.vo.PowerVo;
|
||||
import cn.bunny.domain.vo.result.PageResult;
|
||||
import cn.bunny.domain.vo.result.ResultCodeEnum;
|
||||
import cn.bunny.services.exception.AuthCustomerException;
|
||||
import cn.bunny.services.mapper.system.PowerMapper;
|
||||
import cn.bunny.services.mapper.system.RolePowerMapper;
|
||||
import cn.bunny.services.mapper.system.RolePermissionMapper;
|
||||
import cn.bunny.services.service.system.PowerService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
|
@ -37,10 +37,10 @@ import java.util.List;
|
|||
*/
|
||||
@Service
|
||||
@Transactional
|
||||
public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements PowerService {
|
||||
public class PowerServiceImpl extends ServiceImpl<PowerMapper, Permission> implements PowerService {
|
||||
|
||||
@Resource
|
||||
private RolePowerMapper rolePowerMapper;
|
||||
private RolePermissionMapper rolePermissionMapper;
|
||||
|
||||
/**
|
||||
* * 权限 服务实现类
|
||||
|
@ -50,7 +50,7 @@ public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements
|
|||
* @return 查询分页权限返回对象
|
||||
*/
|
||||
@Override
|
||||
public PageResult<PowerVo> getPowerList(Page<Power> pageParams, PowerDto dto) {
|
||||
public PageResult<PowerVo> getPowerList(Page<Permission> pageParams, PowerDto dto) {
|
||||
IPage<PowerVo> page = baseMapper.selectListByPage(pageParams, dto);
|
||||
|
||||
return PageResult.<PowerVo>builder()
|
||||
|
@ -69,8 +69,8 @@ public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements
|
|||
@Override
|
||||
@Cacheable(cacheNames = "power", key = "'allPower'", cacheManager = "cacheManagerWithMouth")
|
||||
public List<PowerVo> getAllPowers() {
|
||||
List<Power> powerList = list();
|
||||
return powerList.stream().map(power -> {
|
||||
List<Permission> permissionList = list();
|
||||
return permissionList.stream().map(power -> {
|
||||
PowerVo powerVo = new PowerVo();
|
||||
BeanUtils.copyProperties(power, powerVo);
|
||||
return powerVo;
|
||||
|
@ -86,17 +86,17 @@ public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements
|
|||
@CacheEvict(cacheNames = "power", key = "'allPower'", beforeInvocation = true)
|
||||
public void addPower(@Valid PowerAddDto dto) {
|
||||
// 添加权限时确保权限码和请求地址是唯一的
|
||||
LambdaQueryWrapper<Power> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Power::getPowerCode, dto.getPowerCode())
|
||||
LambdaQueryWrapper<Permission> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(Permission::getPowerCode, dto.getPowerCode())
|
||||
.or()
|
||||
.eq(Power::getRequestUrl, dto.getRequestUrl());
|
||||
List<Power> powerList = list(wrapper);
|
||||
if (!powerList.isEmpty()) throw new AuthCustomerException(ResultCodeEnum.DATA_EXIST);
|
||||
.eq(Permission::getRequestUrl, dto.getRequestUrl());
|
||||
List<Permission> permissionList = list(wrapper);
|
||||
if (!permissionList.isEmpty()) throw new AuthCustomerException(ResultCodeEnum.DATA_EXIST);
|
||||
|
||||
// 保存数据
|
||||
Power power = new Power();
|
||||
BeanUtils.copyProperties(dto, power);
|
||||
save(power);
|
||||
Permission permission = new Permission();
|
||||
BeanUtils.copyProperties(dto, permission);
|
||||
save(permission);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -108,14 +108,14 @@ public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements
|
|||
@CacheEvict(cacheNames = "power", key = "'allPower'", beforeInvocation = true)
|
||||
public void updatePower(@Valid PowerUpdateDto dto) {
|
||||
Long id = dto.getId();
|
||||
List<Power> powerList = list(Wrappers.<Power>lambdaQuery().eq(Power::getId, id));
|
||||
if (powerList.isEmpty()) throw new AuthCustomerException(ResultCodeEnum.DATA_NOT_EXIST);
|
||||
List<Permission> permissionList = list(Wrappers.<Permission>lambdaQuery().eq(Permission::getId, id));
|
||||
if (permissionList.isEmpty()) throw new AuthCustomerException(ResultCodeEnum.DATA_NOT_EXIST);
|
||||
if (dto.getId().equals(dto.getParentId())) throw new AuthCustomerException(ResultCodeEnum.ILLEGAL_DATA_REQUEST);
|
||||
|
||||
// 更新内容
|
||||
Power power = new Power();
|
||||
BeanUtils.copyProperties(dto, power);
|
||||
updateById(power);
|
||||
Permission permission = new Permission();
|
||||
BeanUtils.copyProperties(dto, permission);
|
||||
updateById(permission);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -133,7 +133,7 @@ public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements
|
|||
baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||
|
||||
// 删除角色部门相关
|
||||
rolePowerMapper.deleteBatchPowerIdsWithPhysics(ids);
|
||||
rolePermissionMapper.deleteBatchPowerIdsWithPhysics(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -144,13 +144,13 @@ public class PowerServiceImpl extends ServiceImpl<PowerMapper, Power> implements
|
|||
@Override
|
||||
@CacheEvict(cacheNames = "power", key = "'allPower'", beforeInvocation = true)
|
||||
public void updateBatchByPowerWithParentId(PowerUpdateBatchByParentIdDto dto) {
|
||||
List<Power> powerList = dto.getIds().stream().map(id -> {
|
||||
Power power = new Power();
|
||||
power.setId(id);
|
||||
power.setParentId(dto.getParentId());
|
||||
return power;
|
||||
List<Permission> permissionList = dto.getIds().stream().map(id -> {
|
||||
Permission permission = new Permission();
|
||||
permission.setId(id);
|
||||
permission.setParentId(dto.getParentId());
|
||||
return permission;
|
||||
}).toList();
|
||||
|
||||
updateBatchById(powerList);
|
||||
updateBatchById(permissionList);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,9 +2,9 @@ package cn.bunny.services.service.system.impl;
|
|||
|
||||
import cn.bunny.domain.system.dto.AssignPowersToRoleDto;
|
||||
import cn.bunny.domain.system.entity.AdminUser;
|
||||
import cn.bunny.domain.system.entity.RolePower;
|
||||
import cn.bunny.domain.system.entity.RolePermission;
|
||||
import cn.bunny.domain.system.entity.UserRole;
|
||||
import cn.bunny.services.mapper.system.RolePowerMapper;
|
||||
import cn.bunny.services.mapper.system.RolePermissionMapper;
|
||||
import cn.bunny.services.mapper.system.UserMapper;
|
||||
import cn.bunny.services.mapper.system.UserRoleMapper;
|
||||
import cn.bunny.services.service.system.RolePowerService;
|
||||
|
@ -27,7 +27,7 @@ import java.util.List;
|
|||
*/
|
||||
@Service
|
||||
@Transactional
|
||||
public class RolePowerServiceImpl extends ServiceImpl<RolePowerMapper, RolePower> implements RolePowerService {
|
||||
public class RolePowerServiceImpl extends ServiceImpl<RolePermissionMapper, RolePermission> implements RolePowerService {
|
||||
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
@ -46,8 +46,8 @@ public class RolePowerServiceImpl extends ServiceImpl<RolePowerMapper, RolePower
|
|||
*/
|
||||
@Override
|
||||
public List<String> getPowerListByRoleId(Long id) {
|
||||
List<RolePower> rolePowerList = baseMapper.selectPowerListByRoleId(id);
|
||||
return rolePowerList.stream().map(rolePower -> rolePower.getPowerId().toString()).toList();
|
||||
List<RolePermission> rolePermissionList = baseMapper.selectPowerListByRoleId(id);
|
||||
return rolePermissionList.stream().map(rolePermission -> rolePermission.getPowerId().toString()).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -64,13 +64,13 @@ public class RolePowerServiceImpl extends ServiceImpl<RolePowerMapper, RolePower
|
|||
baseMapper.deleteBatchRoleIdsWithPhysics(List.of(roleId));
|
||||
|
||||
// 保存分配数据
|
||||
List<RolePower> rolePowerList = powerIds.stream().map(powerId -> {
|
||||
RolePower rolePower = new RolePower();
|
||||
rolePower.setRoleId(roleId);
|
||||
rolePower.setPowerId(powerId);
|
||||
return rolePower;
|
||||
List<RolePermission> rolePermissionList = powerIds.stream().map(powerId -> {
|
||||
RolePermission rolePermission = new RolePermission();
|
||||
rolePermission.setRoleId(roleId);
|
||||
rolePermission.setPowerId(powerId);
|
||||
return rolePermission;
|
||||
}).toList();
|
||||
saveBatch(rolePowerList);
|
||||
saveBatch(rolePermissionList);
|
||||
|
||||
// 找到所有和当前更新角色相同的用户
|
||||
List<Long> roleIds = userRoleMapper.selectList(Wrappers.<UserRole>lambdaQuery().eq(UserRole::getRoleId, roleId))
|
||||
|
|
|
@ -10,7 +10,7 @@ import cn.bunny.domain.vo.result.PageResult;
|
|||
import cn.bunny.domain.vo.result.ResultCodeEnum;
|
||||
import cn.bunny.services.exception.AuthCustomerException;
|
||||
import cn.bunny.services.mapper.system.RoleMapper;
|
||||
import cn.bunny.services.mapper.system.RolePowerMapper;
|
||||
import cn.bunny.services.mapper.system.RolePermissionMapper;
|
||||
import cn.bunny.services.mapper.system.RouterRoleMapper;
|
||||
import cn.bunny.services.mapper.system.UserRoleMapper;
|
||||
import cn.bunny.services.service.system.RoleService;
|
||||
|
@ -43,7 +43,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
|
|||
private UserRoleMapper userRoleMapper;
|
||||
|
||||
@Resource
|
||||
private RolePowerMapper rolePowerMapper;
|
||||
private RolePermissionMapper rolePermissionMapper;
|
||||
|
||||
@Resource
|
||||
private RouterRoleMapper routerRoleMapper;
|
||||
|
@ -137,7 +137,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements Ro
|
|||
baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||
|
||||
// 删除角色权限相关
|
||||
rolePowerMapper.deleteBatchRoleIdsWithPhysics(ids);
|
||||
rolePermissionMapper.deleteBatchRoleIdsWithPhysics(ids);
|
||||
|
||||
// 删除角色和用户相关
|
||||
userRoleMapper.deleteBatchIdsByRoleIdsWithPhysics(ids);
|
||||
|
|
|
@ -1,18 +1,15 @@
|
|||
package cn.bunny.services.service.system.impl;
|
||||
|
||||
import cn.bunny.domain.system.entity.RouterRole;
|
||||
import cn.bunny.domain.system.dto.router.AssignRolesToRoutersDto;
|
||||
import cn.bunny.domain.vo.result.ResultCodeEnum;
|
||||
import cn.bunny.services.exception.AuthCustomerException;
|
||||
import cn.bunny.services.mapper.system.RouterRoleMapper;
|
||||
import cn.bunny.services.service.system.RouterRoleService;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
@ -39,35 +36,6 @@ public class RouterRoleServiceImpl extends ServiceImpl<RouterRoleMapper, RouterR
|
|||
.map(routerRole -> routerRole.getRoleId().toString()).toList();
|
||||
}
|
||||
|
||||
/**
|
||||
* * 为菜单分配角色
|
||||
*
|
||||
* @param dto 路由分配角色
|
||||
*/
|
||||
@Override
|
||||
public void assignRolesToRouter(AssignRolesToRoutersDto dto) {
|
||||
List<Long> routerIds = dto.getRouterIds();
|
||||
List<Long> roleIds = dto.getRoleIds();
|
||||
|
||||
// 删除这个路由下所有已经分配好的角色内容
|
||||
baseMapper.deleteBatchIdsByRouterIdsWithPhysics(routerIds);
|
||||
|
||||
// 保存分配好的角色信息
|
||||
List<RouterRole> roleList = new ArrayList<>();
|
||||
for (Long roleId : roleIds) {
|
||||
List<RouterRole> list = routerIds.stream().map(routerId -> {
|
||||
RouterRole routerRole = new RouterRole();
|
||||
routerRole.setRouterId(routerId);
|
||||
routerRole.setRoleId(roleId);
|
||||
return routerRole;
|
||||
}).toList();
|
||||
|
||||
roleList.addAll(list);
|
||||
}
|
||||
|
||||
saveBatch(roleList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清除选中菜单所有角色
|
||||
*
|
||||
|
@ -80,42 +48,5 @@ public class RouterRoleServiceImpl extends ServiceImpl<RouterRoleMapper, RouterR
|
|||
}
|
||||
baseMapper.deleteBatchIdsByRouterIdsWithPhysics(routerIds);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量为菜单添加角色
|
||||
* 查询所有满足角色id列表的路由
|
||||
* 将满足条件的路由提取出routerId列表
|
||||
* 并删除所有routerIds
|
||||
*
|
||||
* @param dto 路由分配角色
|
||||
*/
|
||||
@Override
|
||||
public void assignAddBatchRolesToRouter(AssignRolesToRoutersDto dto) {
|
||||
// 查询所有满足角色id和路由Id相关
|
||||
LambdaQueryWrapper<RouterRole> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.in(RouterRole::getRoleId, dto.getRoleIds())
|
||||
.and(qw -> qw.in(RouterRole::getRouterId, dto.getRouterIds()));
|
||||
List<RouterRole> routerRoleList = list(wrapper);
|
||||
|
||||
// 根据Id列表物理删除路由角色关系表
|
||||
List<Long> ids = routerRoleList.stream().map(RouterRole::getId).toList();
|
||||
if (!ids.isEmpty()) {
|
||||
baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||
}
|
||||
|
||||
// 保存分配好的角色信息
|
||||
List<RouterRole> roleList = new ArrayList<>();
|
||||
for (Long roleId : dto.getRoleIds()) {
|
||||
List<RouterRole> list = dto.getRouterIds().stream().map(routerId -> {
|
||||
RouterRole routerRole = new RouterRole();
|
||||
routerRole.setRouterId(routerId);
|
||||
routerRole.setRoleId(roleId);
|
||||
return routerRole;
|
||||
}).toList();
|
||||
|
||||
roleList.addAll(list);
|
||||
}
|
||||
|
||||
saveBatch(roleList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,37 +1,35 @@
|
|||
package cn.bunny.services.service.system.impl;
|
||||
|
||||
import cn.bunny.domain.system.dto.router.RouterAddDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterManageDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterUpdateByIdWithRankDto;
|
||||
import cn.bunny.domain.system.dto.router.RouterUpdateDto;
|
||||
import cn.bunny.domain.system.entity.Role;
|
||||
import cn.bunny.domain.system.entity.Router;
|
||||
import cn.bunny.domain.system.entity.RouterMeta;
|
||||
import cn.bunny.domain.system.entity.RouterMetaTransition;
|
||||
import cn.bunny.domain.system.views.ViewRolePermission;
|
||||
import cn.bunny.domain.system.views.ViewRouterRole;
|
||||
import cn.bunny.domain.system.vo.router.RouterManageVo;
|
||||
import cn.bunny.domain.system.vo.router.RouterMeta;
|
||||
import cn.bunny.domain.system.vo.router.UserRouterVo;
|
||||
import cn.bunny.domain.views.ViewRolePower;
|
||||
import cn.bunny.domain.views.ViewRouterRole;
|
||||
import cn.bunny.domain.vo.result.PageResult;
|
||||
import cn.bunny.domain.system.vo.router.RouterVo;
|
||||
import cn.bunny.domain.system.vo.router.WebUserRouterVo;
|
||||
import cn.bunny.domain.vo.result.ResultCodeEnum;
|
||||
import cn.bunny.services.context.BaseContext;
|
||||
import cn.bunny.services.exception.AuthCustomerException;
|
||||
import cn.bunny.services.mapper.system.RoleMapper;
|
||||
import cn.bunny.services.mapper.system.RolePowerMapper;
|
||||
import cn.bunny.services.mapper.system.RolePermissionMapper;
|
||||
import cn.bunny.services.mapper.system.RouterMapper;
|
||||
import cn.bunny.services.mapper.system.RouterRoleMapper;
|
||||
import cn.bunny.services.service.system.RouterService;
|
||||
import cn.bunny.services.utils.system.RoleUtil;
|
||||
import cn.bunny.services.utils.system.RouterServiceUtil;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import cn.bunny.services.utils.system.RouterUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
@ -45,154 +43,84 @@ import java.util.stream.Collectors;
|
|||
@Service
|
||||
@Transactional
|
||||
public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> implements RouterService {
|
||||
@Resource
|
||||
private RouterServiceUtil routerServiceUtil;
|
||||
|
||||
@Resource
|
||||
private RoleMapper roleMapper;
|
||||
|
||||
@Resource
|
||||
private RouterRoleMapper routerRoleMapper;
|
||||
|
||||
@Resource
|
||||
private RolePowerMapper rolePowerMapper;
|
||||
private RouterUtil routerUtil;
|
||||
|
||||
@Resource
|
||||
private RolePermissionMapper rolePermissionMapper;
|
||||
|
||||
/**
|
||||
* * 获取路由内容
|
||||
* 获取路由内容
|
||||
*
|
||||
* @return 路遇列表
|
||||
*/
|
||||
@Override
|
||||
public List<UserRouterVo> getRouterAsync() {
|
||||
// 根据用户ID查询角色数据
|
||||
Long userId = BaseContext.getUserId();
|
||||
|
||||
// 查询角色信息
|
||||
List<Role> roleList;
|
||||
List<String> userRoleCodeList;
|
||||
if (userId.equals(1L)) {
|
||||
userRoleCodeList = List.of("admin");
|
||||
} else {
|
||||
roleList = roleMapper.selectListByUserId(userId);
|
||||
userRoleCodeList = roleList.stream().map(Role::getRoleCode).toList();
|
||||
}
|
||||
|
||||
// 如果没有分配角色直接返回空数组
|
||||
if (userRoleCodeList.isEmpty()) return new ArrayList<>();
|
||||
|
||||
public List<WebUserRouterVo> routerAsync() {
|
||||
// 返回路由列表
|
||||
List<UserRouterVo> list = new ArrayList<>();
|
||||
List<WebUserRouterVo> voList = new ArrayList<>();
|
||||
|
||||
// 查询用户角色,判断是否是管理员角色
|
||||
boolean isAdmin = RoleUtil.checkAdmin(userRoleCodeList);
|
||||
|
||||
// 查询路由和角色对应关系
|
||||
List<ViewRouterRole> routerRoleList = routerRoleMapper.viewRouterRolesWithAll();
|
||||
Map<Long, List<String>> routerIdWithRoleCodeMap = routerRoleList.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
ViewRouterRole::getRouterId,
|
||||
Collectors.mapping(ViewRouterRole::getRoleCode, Collectors.toUnmodifiableList())
|
||||
));
|
||||
|
||||
// 角色和权限对应关系
|
||||
List<ViewRolePower> rolePowerList = rolePowerMapper.viewRolePowerWithAll();
|
||||
Map<String, Set<String>> roleCodeWithPowerCodeMap = rolePowerList.stream()
|
||||
.collect(Collectors.groupingBy(
|
||||
ViewRolePower::getRoleCode,
|
||||
Collectors.mapping(ViewRolePower::getPowerCode, Collectors.toUnmodifiableSet())
|
||||
));
|
||||
|
||||
// 查询所有路由内容
|
||||
// 当前的所有的路由列表
|
||||
List<Router> routerList = list();
|
||||
|
||||
// 构建返回路由列表
|
||||
List<UserRouterVo> routerVoList = routerList.stream()
|
||||
.sorted(Comparator.comparing(Router::getRouterRank))
|
||||
.filter(Router::getVisible)
|
||||
.map(router -> {
|
||||
// 角色码列表
|
||||
List<String> roleCodeList;
|
||||
// 查询路由角色列表
|
||||
Map<Long, List<ViewRouterRole>> routerRoleList = routerRoleMapper.selectRouterRoleList().stream()
|
||||
.collect(Collectors.groupingBy(ViewRouterRole::getRouterId, Collectors.toList()));
|
||||
|
||||
// 权限码列表
|
||||
List<String> powerCodeList;
|
||||
// 查询角色和权限列表,根据角色id获取对应权限
|
||||
Map<Long, List<ViewRolePermission>> rolePermissionList = rolePermissionMapper.viewRolePowerWithAll().stream()
|
||||
.collect(Collectors.groupingBy(ViewRolePermission::getRoleId, Collectors.toList()));
|
||||
|
||||
// 判断是否是admin
|
||||
if (isAdmin) {
|
||||
roleCodeList = userRoleCodeList;
|
||||
powerCodeList = List.of("*", "*::*", "*::*::*");
|
||||
} else {
|
||||
roleCodeList = routerIdWithRoleCodeMap.getOrDefault(router.getId(), Collections.emptyList());
|
||||
powerCodeList = roleCodeList.stream()
|
||||
.map(roleCodeWithPowerCodeMap::get)
|
||||
.filter(Objects::nonNull)
|
||||
.flatMap(Set::stream)
|
||||
.collect(Collectors.toUnmodifiableSet())
|
||||
.stream().toList();
|
||||
}
|
||||
// 整理web用户所能看到的路由列表
|
||||
List<WebUserRouterVo> webUserRouterVoList = routerUtil.getWebUserRouterVos(routerList, routerRoleList, rolePermissionList);
|
||||
|
||||
// 复制对象
|
||||
UserRouterVo routerVo = new UserRouterVo();
|
||||
BeanUtils.copyProperties(router, routerVo);
|
||||
|
||||
// 设置
|
||||
RouterMeta meta = RouterMeta.builder()
|
||||
.frameSrc(router.getFrameSrc())
|
||||
.rank(router.getRouterRank())
|
||||
.icon(router.getIcon())
|
||||
.title(router.getTitle())
|
||||
.roles(roleCodeList)
|
||||
.auths(powerCodeList)
|
||||
.build();
|
||||
|
||||
routerVo.setMeta(meta);
|
||||
return routerVo;
|
||||
}).distinct().toList();
|
||||
|
||||
// 构建树形结构
|
||||
routerVoList.forEach(routerVo -> {
|
||||
// 添加 admin 管理路由权限
|
||||
webUserRouterVoList.forEach(routerVo -> {
|
||||
// 递归添加路由节点
|
||||
if (routerVo.getParentId() == 0) {
|
||||
routerVo.setChildren(routerServiceUtil.handleGetChildrenWIthRouter(routerVo.getId(), routerVoList));
|
||||
list.add(routerVo);
|
||||
routerVo.setChildren(routerUtil.handleGetChildrenWIthRouter(routerVo.getId(), webUserRouterVoList));
|
||||
voList.add(routerVo);
|
||||
}
|
||||
});
|
||||
|
||||
return list;
|
||||
return voList;
|
||||
}
|
||||
|
||||
/**
|
||||
* * 管理菜单列表
|
||||
*
|
||||
* @param pageParams 分页想去
|
||||
* @param dto 路由查询表单
|
||||
* @return 系统菜单表分页
|
||||
*/
|
||||
@Override
|
||||
public PageResult<RouterManageVo> getMenusByPage(Page<Router> pageParams, RouterManageDto dto) {
|
||||
IPage<RouterManageVo> page = baseMapper.selectListByPage(pageParams, dto);
|
||||
|
||||
// 构建返回对象
|
||||
List<RouterManageVo> voList = page.getRecords().stream()
|
||||
.sorted(Comparator.comparing(RouterManageVo::getRouterRank))
|
||||
.toList();
|
||||
|
||||
return PageResult.<RouterManageVo>builder()
|
||||
.list(voList)
|
||||
.pageNo(page.getCurrent())
|
||||
.pageSize(page.getSize())
|
||||
.total(page.getTotal())
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* * 管理菜单列表
|
||||
* 管理菜单列表
|
||||
*
|
||||
* @return 系统菜单表
|
||||
*/
|
||||
@Override
|
||||
public List<RouterManageVo> getMenusList(RouterManageDto dto) {
|
||||
List<RouterManageVo> list = baseMapper.selectAllList(dto);
|
||||
return list.stream()
|
||||
.sorted(Comparator.comparing(RouterManageVo::getRouterRank))
|
||||
public List<RouterManageVo> menuList() {
|
||||
// 查询菜单路由
|
||||
List<RouterVo> routerList = baseMapper.selectMenuList();
|
||||
|
||||
return routerList.stream().map(router -> {
|
||||
// 管理路由
|
||||
RouterManageVo routerManageVo = new RouterManageVo();
|
||||
BeanUtils.copyProperties(router, routerManageVo);
|
||||
|
||||
// 将字符串JSON转成实体类,需要判断 meta和transition 是否存在
|
||||
String meta = router.getMeta();
|
||||
if (StringUtils.hasText(meta)) {
|
||||
// 路由 Meta
|
||||
RouterMeta routerMeta = JSON.parseObject(meta, RouterMeta.class);
|
||||
BeanUtils.copyProperties(routerMeta, routerManageVo);
|
||||
|
||||
// 路由动画
|
||||
RouterMetaTransition transition = routerMeta.getTransition();
|
||||
if (transition != null) {
|
||||
BeanUtils.copyProperties(transition, routerManageVo);
|
||||
}
|
||||
}
|
||||
return routerManageVo;
|
||||
})
|
||||
.sorted(Comparator.comparing(RouterManageVo::getRank))
|
||||
.toList();
|
||||
}
|
||||
|
||||
|
@ -207,9 +135,20 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
|
|||
Router router = new Router();
|
||||
BeanUtils.copyProperties(dto, router);
|
||||
|
||||
// 将 meta转成json
|
||||
RouterMeta meta = dto.getMeta();
|
||||
String jsonString = JSON.toJSONString(meta);
|
||||
router.setMeta(jsonString);
|
||||
|
||||
// 将数据提出role 和 power 存储到数据库
|
||||
Long id = router.getId();
|
||||
routerUtil.insertRouterRoleAndPermission(meta, id);
|
||||
|
||||
// 添加路由
|
||||
save(router);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* * 更新路由菜单
|
||||
*
|
||||
|
@ -217,19 +156,23 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
|
|||
*/
|
||||
@Override
|
||||
public void updateMenu(RouterUpdateDto dto) {
|
||||
// 查询当前路由和父级路由
|
||||
Router routerParent = getOne(Wrappers.<Router>lambdaQuery().eq(Router::getId, dto.getParentId()));
|
||||
|
||||
// 设置路由等级需要大于或等于父级的路由等级
|
||||
if (routerParent != null && (dto.getRouterRank() < routerParent.getRouterRank())) {
|
||||
throw new AuthCustomerException(ResultCodeEnum.ROUTER_RANK_NEED_LARGER_THAN_THE_PARENT);
|
||||
}
|
||||
|
||||
// 如果设置的不是外部页面
|
||||
if (!dto.getMenuType().equals(2)) dto.setFrameSrc("");
|
||||
|
||||
// 更新路由
|
||||
Router router = new Router();
|
||||
BeanUtils.copyProperties(dto, router);
|
||||
|
||||
// 将前端meta转成JSON 存储到数据库
|
||||
RouterMeta meta = dto.getMeta();
|
||||
String jsonString = JSON.toJSONString(meta);
|
||||
router.setMeta(jsonString);
|
||||
|
||||
Long id = router.getId();
|
||||
// 先删除路由和角色下所有内容
|
||||
routerRoleMapper.deleteBatchIdsByRouterIdsWithPhysics(List.of(id));
|
||||
|
||||
// 将数据提出role 和 power 存储到数据库
|
||||
routerUtil.insertRouterRoleAndPermission(meta, id);
|
||||
|
||||
// 更新路由信息
|
||||
updateById(router);
|
||||
}
|
||||
|
||||
|
@ -253,31 +196,4 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
|
|||
// // 物理删除
|
||||
// baseMapper.deleteBatchIdsWithPhysics(ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* * 快速更新菜单排序
|
||||
*
|
||||
* @param dto 根据菜单Id更新菜单排序
|
||||
*/
|
||||
@Override
|
||||
public void updateMenuByIdWithRank(RouterUpdateByIdWithRankDto dto) {
|
||||
Router router = getOne(Wrappers.<Router>lambdaQuery().eq(Router::getId, dto.getId()));
|
||||
|
||||
// 判断更新数据是否存在
|
||||
if (router == null) throw new AuthCustomerException(ResultCodeEnum.DATA_NOT_EXIST);
|
||||
|
||||
// 查询当前路由和父级路由
|
||||
Router routerParent = getOne(Wrappers.<Router>lambdaQuery().eq(Router::getId, router.getParentId()));
|
||||
|
||||
// 设置路由等级需要大于或等于父级的路由等级
|
||||
if (routerParent != null && (dto.getRouterRank() < routerParent.getRouterRank())) {
|
||||
throw new AuthCustomerException(ResultCodeEnum.ROUTER_RANK_NEED_LARGER_THAN_THE_PARENT);
|
||||
}
|
||||
|
||||
// 更新排序
|
||||
router = new Router();
|
||||
router.setId(dto.getId());
|
||||
router.setRouterRank(dto.getRouterRank());
|
||||
updateById(router);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,11 +12,11 @@ import cn.bunny.domain.system.dto.user.*;
|
|||
import cn.bunny.domain.system.entity.AdminUser;
|
||||
import cn.bunny.domain.system.entity.Role;
|
||||
import cn.bunny.domain.system.entity.UserDept;
|
||||
import cn.bunny.domain.system.views.ViewUserDept;
|
||||
import cn.bunny.domain.system.vo.user.AdminUserVo;
|
||||
import cn.bunny.domain.system.vo.user.RefreshTokenVo;
|
||||
import cn.bunny.domain.system.vo.user.SearchUserinfoVo;
|
||||
import cn.bunny.domain.system.vo.user.UserVo;
|
||||
import cn.bunny.domain.views.ViewUserDept;
|
||||
import cn.bunny.domain.vo.LoginVo;
|
||||
import cn.bunny.domain.vo.result.PageResult;
|
||||
import cn.bunny.domain.vo.result.ResultCodeEnum;
|
||||
|
@ -102,7 +102,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, AdminUser> implemen
|
|||
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
|
||||
|
||||
@Resource
|
||||
private PasswordEncoder passwordEncoder;
|
||||
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
package cn.bunny.services.utils.system;
|
||||
|
||||
import cn.bunny.domain.system.vo.router.UserRouterVo;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
public class RouterServiceUtil {
|
||||
|
||||
/**
|
||||
* * 递归调用设置子路由
|
||||
*
|
||||
* @param id 主键
|
||||
* @param routerVoList 返回VO列表
|
||||
* @return 返回路由列表
|
||||
*/
|
||||
public List<UserRouterVo> handleGetChildrenWIthRouter(Long id, @NotNull List<UserRouterVo> routerVoList) {
|
||||
List<UserRouterVo> list = new ArrayList<>();
|
||||
for (UserRouterVo routerVo : routerVoList) {
|
||||
if (routerVo.getParentId().equals(id)) {
|
||||
routerVo.setChildren(handleGetChildrenWIthRouter(routerVo.getId(), routerVoList));
|
||||
list.add(routerVo);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,146 @@
|
|||
package cn.bunny.services.utils.system;
|
||||
|
||||
import cn.bunny.domain.system.entity.Router;
|
||||
import cn.bunny.domain.system.entity.RouterMeta;
|
||||
import cn.bunny.domain.system.entity.RouterRole;
|
||||
import cn.bunny.domain.system.views.ViewRolePermission;
|
||||
import cn.bunny.domain.system.views.ViewRouterRole;
|
||||
import cn.bunny.domain.system.vo.router.WebUserRouterVo;
|
||||
import cn.bunny.services.service.system.RouterRoleService;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static cn.bunny.domain.constant.UserConstant.allAuths;
|
||||
|
||||
@Component
|
||||
public class RouterUtil {
|
||||
|
||||
@Resource
|
||||
private RouterRoleService routerRoleService;
|
||||
|
||||
/**
|
||||
* * 递归调用设置子路由
|
||||
*
|
||||
* @param id 主键
|
||||
* @param webUserRouterVoList 返回VO列表
|
||||
* @return 返回路由列表
|
||||
*/
|
||||
public List<WebUserRouterVo> handleGetChildrenWIthRouter(Long id, @NotNull List<WebUserRouterVo> webUserRouterVoList) {
|
||||
List<WebUserRouterVo> list = new ArrayList<>();
|
||||
for (WebUserRouterVo webUserRouterVo : webUserRouterVoList) {
|
||||
if (webUserRouterVo.getParentId().equals(id)) {
|
||||
webUserRouterVo.setChildren(handleGetChildrenWIthRouter(webUserRouterVo.getId(), webUserRouterVoList));
|
||||
list.add(webUserRouterVo);
|
||||
}
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询新的路由权限和角色
|
||||
*
|
||||
* @param meta RouterMeta
|
||||
* @param id 路由id
|
||||
*/
|
||||
public void insertRouterRoleAndPermission(RouterMeta meta, Long id) {
|
||||
List<String> roles = meta.getRoles();
|
||||
|
||||
// 插入新的角色信息
|
||||
List<RouterRole> routerRoleList = roles.stream().map(role -> {
|
||||
RouterRole routerRole = new RouterRole();
|
||||
routerRole.setRouterId(id);
|
||||
routerRole.setRoleId(Long.valueOf(role));
|
||||
return routerRole;
|
||||
}).toList();
|
||||
routerRoleService.saveBatch(routerRoleList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 整理web用户所能看到的路由列表
|
||||
*
|
||||
* @param routerList 所有的路由列表
|
||||
* @param routerRoleList 路由和角色列表
|
||||
* @param rolePermissionList 角色和权限列表
|
||||
* @return web用户所能看到的路由列表
|
||||
*/
|
||||
@NotNull
|
||||
public List<WebUserRouterVo> getWebUserRouterVos(List<Router> routerList, Map<Long, List<ViewRouterRole>> routerRoleList, Map<Long, List<ViewRolePermission>> rolePermissionList) {
|
||||
// 查询路由所有数据,整理前端需要的路和、角色、权限
|
||||
return routerList.stream().map(view -> {
|
||||
// 前端需要的格式路由
|
||||
WebUserRouterVo webUserRouterVo = new WebUserRouterVo();
|
||||
|
||||
// 复制数据库中信息到新路由中
|
||||
BeanUtils.copyProperties(view, webUserRouterVo);
|
||||
|
||||
// 整理前端需要格式的路由 meta
|
||||
String meta = view.getMeta();
|
||||
RouterMeta routerMeta;
|
||||
|
||||
// 如果么meta存在,将其转成 RouterMeta 而不是 JSON/字符串
|
||||
if (StringUtils.hasText(meta)) {
|
||||
routerMeta = JSON.parseObject(meta, RouterMeta.class);
|
||||
webUserRouterVo.setMeta(routerMeta);
|
||||
} else {
|
||||
// 不存在时不能为 null 将路由名称设置为title
|
||||
routerMeta = new RouterMeta();
|
||||
routerMeta.setTitle(view.getRouteName());
|
||||
webUserRouterVo.setMeta(routerMeta);
|
||||
}
|
||||
|
||||
// 路由路由和橘色 设置角色信息,防止为空报错,最后添加 roles
|
||||
List<String> roleCodeList = new ArrayList<>(allAuths);
|
||||
if (!routerRoleList.isEmpty()) {
|
||||
// 找到当前路由下的角色信息
|
||||
List<String> list = routerRoleList.getOrDefault(view.getId(), Collections.emptyList()).stream()
|
||||
.map(ViewRouterRole::getRoleCode).toList();
|
||||
|
||||
// 将角色码添加到角色列表
|
||||
roleCodeList.addAll(list);
|
||||
}
|
||||
webUserRouterVo.getMeta().setRoles(roleCodeList);
|
||||
|
||||
// 角色和权限 设置权限信息,最后添加权限信息 auth/permission
|
||||
List<String> permissionList = new ArrayList<>(allAuths);
|
||||
if (!rolePermissionList.isEmpty()) {
|
||||
// 找到当前路由下所有的角色id,之后根据 角色和权限查找 角色对应的权限
|
||||
List<Long> roleIds = routerRoleList.getOrDefault(view.getId(), Collections.emptyList()).stream()
|
||||
.map(ViewRouterRole::getRoleId).toList();
|
||||
|
||||
// 根据角色id找到所有权限
|
||||
List<String> list = roleIds.stream()
|
||||
.map(roleId -> {
|
||||
List<ViewRolePermission> viewRolePermissions = rolePermissionList.get(roleId);
|
||||
|
||||
// 根据角色id查找权限,且角色和权限存在
|
||||
if (roleId != null && viewRolePermissions != null && !viewRolePermissions.isEmpty()) {
|
||||
return viewRolePermissions.stream().map(ViewRolePermission::getPowerCode).toList();
|
||||
}
|
||||
|
||||
// 未找到返回 空字符串
|
||||
return List.of("");
|
||||
})
|
||||
// 将二维数组转成一维数组
|
||||
.flatMap(List::stream)
|
||||
// 过滤掉为空的字符串
|
||||
.filter(StringUtils::hasText)
|
||||
.distinct()
|
||||
.toList();
|
||||
permissionList.addAll(list);
|
||||
}
|
||||
webUserRouterVo.getMeta().setAuths(permissionList);
|
||||
|
||||
return webUserRouterVo;
|
||||
}).toList();
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ import cn.bunny.domain.constant.RedisUserConstant;
|
|||
import cn.bunny.domain.constant.UserConstant;
|
||||
import cn.bunny.domain.log.entity.UserLoginLog;
|
||||
import cn.bunny.domain.system.entity.AdminUser;
|
||||
import cn.bunny.domain.system.entity.Power;
|
||||
import cn.bunny.domain.system.entity.Permission;
|
||||
import cn.bunny.domain.system.entity.Role;
|
||||
import cn.bunny.domain.vo.LoginVo;
|
||||
import cn.bunny.services.exception.AuthCustomerException;
|
||||
|
@ -123,7 +123,7 @@ public class UserUtil {
|
|||
// 判断是否是 admin 如果是admin 赋予所有权限
|
||||
boolean isAdmin = RoleUtil.checkAdmin(roles, permissions, user);
|
||||
if (!isAdmin) {
|
||||
permissions = powerMapper.selectListByUserId(userId).stream().map(Power::getPowerCode).toList();
|
||||
permissions = powerMapper.selectListByUserId(userId).stream().map(Permission::getPowerCode).toList();
|
||||
}
|
||||
|
||||
// 计算过期时间,并格式化返回
|
||||
|
|
2638
auth_admin.sql
2638
auth_admin.sql
File diff suppressed because it is too large
Load Diff
|
@ -2,8 +2,11 @@ package cn.bunny.domain.constant;
|
|||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class UserConstant {
|
||||
public static final String USER_AVATAR = "https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoj0hHXhgJNOTSOFsS4uZs8x1ConecaVOB8eIl115xmJZcT4oCicvia7wMEufibKtTLqiaJeanU2Lpg3w/132";
|
||||
public static final String PERSON_DESCRIPTION = "这个人很懒没有介绍...";
|
||||
public static final List<String> allAuths = List.of("*::*::*", "*::*", "*");
|
||||
}
|
||||
|
|
|
@ -8,11 +8,11 @@ import java.util.Map;
|
|||
public class VmsUtil {
|
||||
|
||||
private static final Map<String, String> TYPE_MAPPINGS = Map.of(
|
||||
"controller" , "Controller" ,
|
||||
"service" , "Service" ,
|
||||
"serviceImpl" , "ServiceImpl" ,
|
||||
"mapper" , "Mapper" ,
|
||||
"resourceMapper" , "Mapper"
|
||||
"controller", "Controller",
|
||||
"service", "Service",
|
||||
"serviceImpl", "ServiceImpl",
|
||||
"mapper", "Mapper",
|
||||
"resourceMapper", "Mapper"
|
||||
);
|
||||
|
||||
/**
|
||||
|
@ -22,20 +22,18 @@ public class VmsUtil {
|
|||
* @param className 类名
|
||||
*/
|
||||
public static String handleVmFilename(String path, String className) {
|
||||
String[] splitPaths = path.split("/" );
|
||||
String[] splitPaths = path.split("/");
|
||||
int splitPathsSize = splitPaths.length - 1;
|
||||
|
||||
// 大驼峰名称
|
||||
String CamelCase = TypeConvertCore.convertToCamelCase(className, true);
|
||||
// 小驼峰名称
|
||||
String camelCase = TypeConvertCore.convertToCamelCase(className);
|
||||
System.out.println("CamelCase:" + CamelCase);
|
||||
System.out.println("camelCase:" + camelCase);
|
||||
// 当前文件名
|
||||
String filename = splitPaths[splitPathsSize];
|
||||
filename = filename.replace(".vm" , "" );
|
||||
filename = filename.replace(".vm", "");
|
||||
|
||||
String[] split = filename.split("\\." );
|
||||
String[] split = filename.split("\\.");
|
||||
// 文件名称
|
||||
String name = split[0];
|
||||
// 文件扩展名
|
||||
|
@ -47,15 +45,15 @@ public class VmsUtil {
|
|||
// 判断是否是 Java 或者 xml 文件
|
||||
String typeMappingsFilename = TYPE_MAPPINGS.get(name);
|
||||
typeMappingsFilename = typeMappingsFilename == null ? "" : typeMappingsFilename;
|
||||
if (filename.contains("java" ) || filename.contains("xml" )) {
|
||||
if (filename.contains("java") || filename.contains("xml")) {
|
||||
filename = CamelCase + typeMappingsFilename + "." + extension;
|
||||
}
|
||||
|
||||
if (filename.contains("vue" ) && !filename.contains("index" )) {
|
||||
if (filename.contains("vue") && !filename.contains("index")) {
|
||||
filename = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_HYPHEN, camelCase) + "-" + name + "." + extension;
|
||||
}
|
||||
|
||||
splitPaths[splitPathsSize] = filename;
|
||||
return String.join("/" , splitPaths);
|
||||
return String.join("/", splitPaths);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue