🔨 SysPermission 重构为 SysMenu,减少了大部分的配置属性,转交由前端处理

This commit is contained in:
b2baccline
2021-04-09 21:37:10 +08:00
parent 5f72665d45
commit 342e418e51
27 changed files with 852 additions and 710 deletions

View File

@@ -0,0 +1,120 @@
package com.hccake.ballcat.admin.modules.sys.controller;
import cn.hutool.core.collection.CollectionUtil;
import com.hccake.ballcat.admin.constants.SysPermissionConst;
import com.hccake.ballcat.admin.modules.sys.converter.SysMenuConverter;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysMenuQO;
import com.hccake.ballcat.admin.modules.sys.model.vo.SysMenuRouterVO;
import com.hccake.ballcat.admin.modules.sys.service.SysMenuService;
import com.hccake.ballcat.admin.oauth.SysUserDetails;
import com.hccake.ballcat.admin.oauth.domain.UserResources;
import com.hccake.ballcat.admin.oauth.util.SecurityUtils;
import com.hccake.ballcat.commom.log.operation.annotation.CreateOperationLogging;
import com.hccake.ballcat.commom.log.operation.annotation.DeleteOperationLogging;
import com.hccake.ballcat.commom.log.operation.annotation.UpdateOperationLogging;
import com.hccake.ballcat.common.model.result.BaseResultCode;
import com.hccake.ballcat.common.model.result.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.stream.Collectors;
/**
* 菜单权限
*
* @author hccake 2021-04-06 17:59:51
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/sys/sysmenu")
@Api(value = "sysmenu", tags = "菜单权限管理")
public class SysMenuController {
private final SysMenuService sysMenuService;
/**
* 返回当前用户的路由集合
* @return 当前用户的路由
*/
@ApiOperation(value = "动态路由", notes = "动态路由")
@GetMapping("/router")
public R<List<SysMenuRouterVO>> getUserPermission() {
// 获取角色Code
SysUserDetails sysUserDetails = SecurityUtils.getSysUserDetails();
UserResources userResources = sysUserDetails.getUserResources();
Collection<String> roleCodes = userResources.getRoles();
if (CollectionUtil.isEmpty(roleCodes)) {
return R.ok(new ArrayList<>());
}
// 获取符合条件的权限
Set<SysMenu> all = new HashSet<>();
roleCodes.forEach(roleCode -> all.addAll(sysMenuService.listByRoleCode(roleCode)));
// 筛选出菜单
List<SysMenuRouterVO> menuVOList = all.stream()
.filter(menuVo -> SysPermissionConst.Type.BUTTON.getValue() != menuVo.getType())
.sorted(Comparator.comparingInt(SysMenu::getSort)).map(SysMenuConverter.INSTANCE::poToRouterVo)
.collect(Collectors.toList());
return R.ok(menuVOList);
}
/**
* 查询菜单列表
* @param sysMenuQO 菜单权限查询对象
* @return R 通用返回体
*/
@ApiOperation(value = "查询菜单列表", notes = "查询菜单列表")
@GetMapping("/list")
@PreAuthorize("@per.hasPermission('sys:sysmenu:read')")
public R<List<SysMenu>> getSysMenuPage(SysMenuQO sysMenuQO) {
return R.ok(sysMenuService.listOrderBySort(sysMenuQO));
}
/**
* 新增菜单权限
* @param sysMenu 菜单权限
* @return R 通用返回体
*/
@ApiOperation(value = "新增菜单权限", notes = "新增菜单权限")
@CreateOperationLogging(msg = "新增菜单权限")
@PostMapping
@PreAuthorize("@per.hasPermission('sys:sysmenu:add')")
public R<String> save(@RequestBody SysMenu sysMenu) {
return sysMenuService.save(sysMenu) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "新增菜单权限失败");
}
/**
* 修改菜单权限
* @param sysMenu 菜单权限
* @return R 通用返回体
*/
@ApiOperation(value = "修改菜单权限", notes = "修改菜单权限")
@UpdateOperationLogging(msg = "修改菜单权限")
@PutMapping
@PreAuthorize("@per.hasPermission('sys:sysmenu:edit')")
public R<String> updateById(@RequestBody SysMenu sysMenu) {
return sysMenuService.updateById(sysMenu) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改菜单权限失败");
}
/**
* 通过id删除菜单权限
* @param id id
* @return R 通用返回体
*/
@ApiOperation(value = "通过id删除菜单权限", notes = "通过id删除菜单权限")
@DeleteOperationLogging(msg = "通过id删除菜单权限")
@DeleteMapping("/{id}")
@PreAuthorize("@per.hasPermission('sys:sysmenu:del')")
public R<String> removeById(@PathVariable Integer id) {
return sysMenuService.removeById(id) ? R.ok() : R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "通过id删除菜单权限失败");
}
}

View File

@@ -1,118 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.controller;
import cn.hutool.core.collection.CollectionUtil;
import com.hccake.ballcat.admin.constants.SysPermissionConst;
import com.hccake.ballcat.admin.modules.sys.converter.SysPermissionConverter;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysPermission;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import com.hccake.ballcat.admin.modules.sys.model.vo.RouterVO;
import com.hccake.ballcat.admin.modules.sys.service.SysPermissionService;
import com.hccake.ballcat.admin.oauth.SysUserDetails;
import com.hccake.ballcat.admin.oauth.domain.UserResources;
import com.hccake.ballcat.admin.oauth.util.SecurityUtils;
import com.hccake.ballcat.commom.log.operation.annotation.CreateOperationLogging;
import com.hccake.ballcat.commom.log.operation.annotation.DeleteOperationLogging;
import com.hccake.ballcat.commom.log.operation.annotation.UpdateOperationLogging;
import com.hccake.ballcat.common.model.result.R;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author hccake
* @date 2019/09/17
*/
@RestController
@RequestMapping("/syspermission")
@Api(value = "syspermission", tags = "权限管理模块")
@RequiredArgsConstructor
public class SysPermissionController {
private final SysPermissionService sysPermissionService;
/**
* 返回当前用户的路由集合
* @return 当前用户的路由
*/
@ApiOperation(value = "动态路由", notes = "动态路由")
@GetMapping("/router")
public R<List<RouterVO>> getUserPermission() {
// 获取角色Code
SysUserDetails sysUserDetails = SecurityUtils.getSysUserDetails();
UserResources userResources = sysUserDetails.getUserResources();
Collection<String> roleCodes = userResources.getRoles();
if (CollectionUtil.isEmpty(roleCodes)) {
return R.ok(new ArrayList<>());
}
// 获取符合条件的权限
Set<PermissionVO> all = new HashSet<>();
roleCodes.forEach(roleCode -> all.addAll(sysPermissionService.listVOByRoleCode(roleCode)));
// 筛选出菜单
List<RouterVO> routerVOList = all.stream()
.filter(menuVo -> SysPermissionConst.Type.MENU.getValue() == menuVo.getType()
|| SysPermissionConst.Type.DIRECTORY.getValue() == menuVo.getType())
.sorted(Comparator.comparingInt(PermissionVO::getSort)).map(SysPermissionConverter.INSTANCE::toRouter)
.collect(Collectors.toList());
return R.ok(routerVOList);
}
/**
* 所有的权限集合
*/
@GetMapping(value = "/list")
@PreAuthorize("@per.hasPermission('sys:syspermission:read')")
public R<List<SysPermission>> getTree() {
return R.ok(sysPermissionService.listOrderBySort());
}
/**
* 通过ID查询权限的详细信息
* @param id 权限ID
* @return 权限详细信息
*/
@GetMapping("/{id}")
@PreAuthorize("@per.hasPermission('sys:syspermission:read')")
public R<SysPermission> getById(@PathVariable Integer id) {
return R.ok(sysPermissionService.getById(id));
}
@ApiOperation(value = "新增权限", notes = "新增权限")
@CreateOperationLogging(msg = "新增权限")
@PostMapping
@PreAuthorize("@per.hasPermission('sys:syspermission:add')")
public R<Boolean> save(@Valid @RequestBody SysPermission sysMenu) {
return R.ok(sysPermissionService.save(sysMenu));
}
/**
* 更新权限
* @param sysPermission 权限
* @return R
*/
@ApiOperation(value = "修改权限", notes = "修改权限")
@UpdateOperationLogging(msg = "修改权限")
@PutMapping
@PreAuthorize("@per.hasPermission('sys:syspermission:edit')")
public R<Boolean> update(@Valid @RequestBody SysPermission sysPermission) {
return R.ok(sysPermissionService.updateById(sysPermission));
}
@ApiOperation(value = "通过id删除权限", notes = "通过id删除权限")
@DeleteOperationLogging(msg = "通过id删除权限")
@DeleteMapping("/{id}")
@PreAuthorize("@per.hasPermission('sys:syspermission:del')")
public R<Boolean> removeById(@PathVariable Integer id) {
return R.ok(sysPermissionService.removeById(id));
}
}

View File

@@ -3,14 +3,14 @@ package com.hccake.ballcat.admin.modules.sys.controller;
import com.hccake.ballcat.admin.constants.SysRoleConst;
import com.hccake.ballcat.admin.modules.sys.converter.SysRoleConverter;
import com.hccake.ballcat.admin.modules.sys.model.dto.SysRoleUpdateDTO;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRole;
import com.hccake.ballcat.admin.modules.sys.model.qo.RoleBindUserQO;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysRoleQO;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import com.hccake.ballcat.admin.modules.sys.model.vo.RoleBindUserVO;
import com.hccake.ballcat.admin.modules.sys.model.vo.SysRolePageVO;
import com.hccake.ballcat.admin.modules.sys.service.SysPermissionService;
import com.hccake.ballcat.admin.modules.sys.service.SysRolePermissionService;
import com.hccake.ballcat.admin.modules.sys.service.SysMenuService;
import com.hccake.ballcat.admin.modules.sys.service.SysRoleMenuService;
import com.hccake.ballcat.admin.modules.sys.service.SysRoleService;
import com.hccake.ballcat.admin.modules.sys.service.SysUserRoleService;
import com.hccake.ballcat.commom.log.operation.annotation.CreateOperationLogging;
@@ -42,11 +42,11 @@ public class SysRoleController {
private final SysRoleService sysRoleService;
private final SysPermissionService sysPermissionService;
private final SysMenuService sysMenuService;
private final SysUserRoleService sysUserRoleService;
private final SysRolePermissionService sysRolePermissionService;
private final SysRoleMenuService sysRoleMenuService;
/**
* 分页查询角色信息
@@ -134,7 +134,7 @@ public class SysRoleController {
@UpdateOperationLogging(msg = "更新角色权限")
@PreAuthorize("@per.hasPermission('sys:sysrole:grant')")
public R<Boolean> savePermissionIds(@PathVariable String roleCode, @RequestBody Integer[] permissionIds) {
return R.ok(sysRolePermissionService.saveRolePermissions(roleCode, permissionIds));
return R.ok(sysRoleMenuService.saveRoleMenus(roleCode, permissionIds));
}
/**
@@ -144,8 +144,9 @@ public class SysRoleController {
*/
@GetMapping("/permission/code/{roleCode}")
public R<List<Integer>> getPermissionIds(@PathVariable String roleCode) {
return R.ok(sysPermissionService.listVOByRoleCode(roleCode).stream().map(PermissionVO::getId)
.collect(Collectors.toList()));
List<SysMenu> sysMenus = sysMenuService.listByRoleCode(roleCode);
List<Integer> menuIds = sysMenus.stream().map(SysMenu::getId).collect(Collectors.toList());
return R.ok(menuIds);
}
/**

View File

@@ -0,0 +1,33 @@
package com.hccake.ballcat.admin.modules.sys.converter;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu;
import com.hccake.ballcat.admin.modules.sys.model.vo.SysMenuRouterVO;
import com.hccake.ballcat.admin.modules.sys.model.vo.SysMenuPageVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* 菜单权限模型转换器
*
* @author hccake 2021-04-06 17:59:51
*/
@Mapper
public interface SysMenuConverter {
SysMenuConverter INSTANCE = Mappers.getMapper(SysMenuConverter.class);
/**
* PO 转 PageVO
* @param sysMenu 菜单权限实体
* @return SysMenuPageVO 菜单权限PageVO
*/
SysMenuPageVO poToPageVo(SysMenu sysMenu);
/**
* PO 转 VO
* @param sysMenu 菜单权限实体
* @return SysMenuVO
*/
SysMenuRouterVO poToRouterVo(SysMenu sysMenu);
}

View File

@@ -1,25 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.converter;
import com.hccake.ballcat.admin.modules.sys.model.vo.RouterVO;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
/**
* @author Hccake
* @version 1.0
* @date 2019/9/17 15:26
*/
@Mapper
public interface SysPermissionConverter {
SysPermissionConverter INSTANCE = Mappers.getMapper(SysPermissionConverter.class);
/**
* 转换permissionVO为Router
* @param permissionVO 权限VO
* @return Router 路由对象
*/
RouterVO toRouter(PermissionVO permissionVO);
}

View File

@@ -0,0 +1,50 @@
package com.hccake.ballcat.admin.modules.sys.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysMenuQO;
import com.hccake.extend.mybatis.plus.conditions.query.LambdaQueryWrapperX;
import com.hccake.extend.mybatis.plus.mapper.ExtendMapper;
import com.hccake.extend.mybatis.plus.toolkit.WrappersX;
import java.io.Serializable;
import java.util.List;
/**
* 菜单权限
*
* @author hccake 2021-04-01 22:08:13
*/
public interface SysMenuMapper extends ExtendMapper<SysMenu> {
/**
* 查询权限集合并按sort排序升序
* @param sysMenuQO 查询条件
* @return List<SysMenu>
*/
default List<SysMenu> listOrderBySort(SysMenuQO sysMenuQO) {
LambdaQueryWrapperX<SysMenu> wrapper = WrappersX.lambdaQueryX(SysMenu.class)
.likeIfPresent(SysMenu::getId, sysMenuQO.getId()).likeIfPresent(SysMenu::getTitle, sysMenuQO.getTitle())
.likeIfPresent(SysMenu::getPermission, sysMenuQO.getPermission())
.likeIfPresent(SysMenu::getPath, sysMenuQO.getPath());
wrapper.orderByAsc(SysMenu::getSort);
return this.selectList(wrapper);
}
/**
* 根据角色标识查询对应的菜单
* @param roleCode 角色标识
* @return List<SysMenu>
*/
List<SysMenu> listByRoleCode(String roleCode);
/**
* 查询指定权限的下级权限总数
* @param id 权限ID
* @return 下级权限总数
*/
default Integer countSubMenu(Serializable id) {
return this.selectCount(Wrappers.<SysMenu>query().lambda().eq(SysMenu::getParentId, id));
}
}

View File

@@ -1,42 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysPermission;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import com.hccake.extend.mybatis.plus.mapper.ExtendMapper;
import java.io.Serializable;
import java.util.List;
/**
* 菜单权限表 Mapper 接口
*
* @author hccake
*/
public interface SysPermissionMapper extends ExtendMapper<SysPermission> {
/**
* 查询指定权限的下级权限总数
* @param id 权限ID
* @return 下级权限总数
*/
default Integer countSubPermission(Serializable id) {
return this.selectCount(Wrappers.<SysPermission>query().lambda().eq(SysPermission::getParentId, id));
}
/**
* 查询权限集合并按sort排序升序
* @return List<SysPermission>
*/
default List<SysPermission> listOrderBySort() {
return this.selectList(Wrappers.<SysPermission>lambdaQuery().orderByAsc(SysPermission::getSort));
}
/**
* 通过角色ID查询权限
* @param roleCode 角色ID
* @return 指定角色拥有的权限列表
*/
List<PermissionVO> listVOByRoleCode(String roleCode);
}

View File

@@ -1,7 +1,7 @@
package com.hccake.ballcat.admin.modules.sys.mapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRolePermission;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRoleMenu;
import com.hccake.extend.mybatis.plus.mapper.ExtendMapper;
import java.io.Serializable;
@@ -14,14 +14,14 @@ import java.io.Serializable;
* @author hccake
* @since 2017-10-29
*/
public interface SysRolePermissionMapper extends ExtendMapper<SysRolePermission> {
public interface SysRoleMenuMapper extends ExtendMapper<SysRoleMenu> {
/**
* 根据权限ID删除角色权限关联关系
* @param permissionId 权限ID
* @param menuId 权限ID
*/
default void deleteByPermissionId(Serializable permissionId) {
this.delete(Wrappers.<SysRolePermission>query().lambda().eq(SysRolePermission::getPermissionId, permissionId));
default void deleteByMenuId(Serializable menuId) {
this.delete(Wrappers.<SysRoleMenu>query().lambda().eq(SysRoleMenu::getMenuId, menuId));
}
/**
@@ -29,7 +29,7 @@ public interface SysRolePermissionMapper extends ExtendMapper<SysRolePermission>
* @param roleCode 角色标识
*/
default void deleteByRoleCode(String roleCode) {
this.delete(Wrappers.<SysRolePermission>query().lambda().eq(SysRolePermission::getRoleCode, roleCode));
this.delete(Wrappers.<SysRoleMenu>query().lambda().eq(SysRoleMenu::getRoleCode, roleCode));
}
}

View File

@@ -0,0 +1,122 @@
package com.hccake.ballcat.admin.modules.sys.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 菜单权限
*
* @author hccake 2021-04-06 17:59:51
*/
@Data
@TableName("sys_menu")
@ApiModel(value = "菜单权限")
public class SysMenu {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@TableId
@ApiModelProperty(value = "菜单ID")
private Integer id;
/**
* 父级ID
*/
@ApiModelProperty(value = "父级ID")
private Integer parentId;
/**
* 菜单名称
*/
@ApiModelProperty(value = "菜单名称")
private String title;
/**
* 菜单图标
*/
@ApiModelProperty(value = "菜单图标")
private String icon;
/**
* 授权标识
*/
@ApiModelProperty(value = "授权标识")
private String permission;
/**
* 路由地址
*/
@ApiModelProperty(value = "路由地址")
private String path;
/**
* 打开方式 (1组件 2内链 3外链)
*/
@ApiModelProperty(value = "打开方式 (1组件 2内链 3外链)")
private Integer targetType;
/**
* 定位标识 (打开方式为组件时其值为组件相对路径其他为URL地址)
*/
@ApiModelProperty(value = "定位标识 (打开方式为组件时其值为组件相对路径其他为URL地址)")
private String uri;
/**
* 显示排序
*/
@ApiModelProperty(value = "显示排序")
private Integer sort;
/**
* 组件缓存0-开启1-关闭
*/
@ApiModelProperty(value = "组件缓存0-开启1-关闭")
private Integer keepAlive;
/**
* 隐藏菜单: 0-否1-是
*/
@ApiModelProperty(value = "隐藏菜单: 0-否1-是")
private Integer hidden;
/**
* 菜单类型 0目录1菜单2按钮
*/
@ApiModelProperty(value = "菜单类型 0目录1菜单2按钮")
private Integer type;
/**
* 备注信息
*/
@ApiModelProperty(value = "备注信息")
private String remarks;
/**
* 逻辑删除标识,未删除为 0已删除为删除时间
*/
@TableLogic
@ApiModelProperty(value = "逻辑删除标识,未删除为 0已删除为删除时间")
private Long deleted;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
}

View File

@@ -1,130 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.model.entity;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 菜单
*
* @author ballcat code generator
* @date 2019-10-14 17:42:23
*/
@Data
@ApiModel(value = "菜单")
@TableName("sys_permission")
public class SysPermission {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@TableId(type = IdType.INPUT)
@ApiModelProperty(value = "菜单ID")
private Integer id;
/**
* 菜单标题
*/
@ApiModelProperty(value = "菜单标题")
private String title;
/**
* 菜单权限标识
*/
@ApiModelProperty(value = "菜单权限标识")
private String code;
/**
* 路由URL
*/
@ApiModelProperty(value = "路由URL")
private String path;
/**
* 路由名称
*/
@ApiModelProperty(value = "路由名称")
private String routerName;
/**
* component地址
*/
@ApiModelProperty(value = "component地址")
private String component;
/**
* 重定向地址
*/
@ApiModelProperty(value = "重定向地址")
private String redirect;
/**
* 链接跳转目标
*/
@ApiModelProperty(value = "链接跳转目标")
private String target;
/**
* 父菜单ID
*/
@ApiModelProperty(value = "父菜单ID")
private Integer parentId;
/**
* 图标
*/
@ApiModelProperty(value = "图标")
private String icon;
/**
* 排序值
*/
@ApiModelProperty(value = "排序值")
private Integer sort;
/**
* 0-开启1- 关闭
*/
@ApiModelProperty(value = "0-开启1- 关闭")
private Integer keepAlive;
/**
* 是否隐藏路由: 0否,1是
*/
@ApiModelProperty(value = "是否隐藏路由: 0否,1是")
private Integer hidden;
/**
* 菜单类型 0菜单 1按钮
*/
@ApiModelProperty(value = "菜单类型 0菜单 1按钮")
private Integer type;
/**
* 逻辑删除标识,已删除:0未删除删除时间戳
*/
@TableLogic
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "逻辑删除标识,已删除:0未删除删除时间戳")
private Long deleted;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
}

View File

@@ -14,18 +14,18 @@ import lombok.Data;
* @date 2019-10-14 17:42:23
*/
@Data
@TableName("sys_role_permission")
@TableName("sys_role_menu")
@ApiModel(value = "角色菜单")
public class SysRolePermission {
public class SysRoleMenu {
private static final long serialVersionUID = 1L;
public SysRolePermission() {
public SysRoleMenu() {
}
public SysRolePermission(String roleCode, Integer permissionId) {
public SysRoleMenu(String roleCode, Integer menuId) {
this.roleCode = roleCode;
this.permissionId = permissionId;
this.menuId = menuId;
}
@TableId(type = IdType.AUTO)
@@ -41,6 +41,6 @@ public class SysRolePermission {
* 权限ID
*/
@ApiModelProperty(value = "菜单id")
private Integer permissionId;
private Integer menuId;
}

View File

@@ -0,0 +1,42 @@
package com.hccake.ballcat.admin.modules.sys.model.qo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 菜单权限 查询对象
*
* @author hccake 2021-04-06 17:59:51
*/
@Data
@ApiModel(value = "菜单权限查询对象")
public class SysMenuQO {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@ApiModelProperty(value = "菜单ID")
private Integer id;
/**
* 菜单名称
*/
@ApiModelProperty(value = "菜单名称")
private String title;
/**
* 授权标识
*/
@ApiModelProperty(value = "授权标识")
private String permission;
/**
* 路由地址
*/
@ApiModelProperty(value = "路由地址")
private String path;
}

View File

@@ -1,133 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* @author Hccake
* @version 1.0
* @date 2019/10/15 14:19
*/
@Data
@ApiModel(value = "权限VO")
public class PermissionVO {
/**
* 菜单ID
*/
@ApiModelProperty(value = "菜单ID")
private Integer id;
/**
* 菜单标题
*/
@ApiModelProperty(value = "菜单标题")
private String title;
/**
* 菜单权限标识
*/
@ApiModelProperty(value = "菜单权限标识")
private String code;
/**
* 路由URL
*/
@ApiModelProperty(value = "路由URL")
private String path;
/**
* 路由名称
*/
@ApiModelProperty(value = "路由名称")
private String routerName;
/**
* component地址
*/
@ApiModelProperty(value = "component地址")
private String component;
/**
* 重定向地址
*/
@ApiModelProperty(value = "重定向地址")
private String redirect;
/**
* 链接跳转目标
*/
@ApiModelProperty(value = "链接跳转目标")
private String target;
/**
* 父菜单ID
*/
@ApiModelProperty(value = "父菜单ID")
private Integer parentId;
/**
* 图标
*/
@ApiModelProperty(value = "图标")
private String icon;
/**
* 排序值
*/
@ApiModelProperty(value = "排序值")
private Integer sort;
/**
* 0-开启1- 关闭
*/
@ApiModelProperty(value = "0-开启1- 关闭")
private Integer keepAlive;
/**
* 是否隐藏路由: 0否,1是
*/
@ApiModelProperty(value = "是否隐藏路由: 0否,1是")
private Integer hidden;
/**
* 菜单类型 0菜单 1按钮
*/
@ApiModelProperty(value = "菜单类型 0菜单 1按钮")
private Integer type;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
@Override
public int hashCode() {
return id.hashCode();
}
/**
* permissionId 相同则相同
* @param obj
* @return
*/
@Override
public boolean equals(Object obj) {
if (obj instanceof PermissionVO) {
Integer permissionId = ((PermissionVO) obj).getId();
return id.equals(permissionId);
}
return super.equals(obj);
}
}

View File

@@ -1,83 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 前端路由视图对象
*
* @author hccake
* @date 2021-03-22
*/
@Data
@ApiModel(value = "前端路由视图对象")
public class RouterVO {
/**
* 菜单ID
*/
@ApiModelProperty(value = "菜单id")
private Integer id;
/**
* 父菜单ID
*/
@ApiModelProperty(value = "父菜单id")
private Integer parentId;
/**
* 菜单图标
*/
@ApiModelProperty(value = "图标")
private String icon;
/**
* 菜单名称
*/
@ApiModelProperty(value = "标题")
private String title;
/**
* 前端路由标识路径
*/
@ApiModelProperty(value = "前端路由名称")
private String routerName;
/**
* 前端路由标识路径
*/
@ApiModelProperty(value = "前端路由标识路径")
private String path;
/**
* 菜单权限标识
*/
@ApiModelProperty(value = "前端路由组件")
private String component;
/**
* 重定向地址
*/
@ApiModelProperty(value = "重定向地址")
private String redirect;
/**
* 链接跳转目标
*/
@ApiModelProperty(value = "链接跳转目标")
private String target;
/**
* 路由缓冲
*/
@ApiModelProperty(value = "开启路由缓冲")
private Integer keepAlive;
/**
* 是否隐藏路由: 0否,1是
*/
@ApiModelProperty(value = "是否隐藏路由: 0否,1是")
private Integer hidden;
}

View File

@@ -0,0 +1,110 @@
package com.hccake.ballcat.admin.modules.sys.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 菜单权限分页视图对象
*
* @author hccake 2021-04-06 17:59:51
*/
@Data
@ApiModel(value = "菜单权限分页视图对象")
public class SysMenuPageVO {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@ApiModelProperty(value = "菜单ID")
private Integer id;
/**
* 父级ID
*/
@ApiModelProperty(value = "父级ID")
private Integer parentId;
/**
* 菜单名称
*/
@ApiModelProperty(value = "菜单名称")
private String title;
/**
* 菜单图标
*/
@ApiModelProperty(value = "菜单图标")
private String icon;
/**
* 授权标识
*/
@ApiModelProperty(value = "授权标识")
private String permission;
/**
* 路由地址
*/
@ApiModelProperty(value = "路由地址")
private String path;
/**
* 打开方式 (1组件 2内链 3外链)
*/
@ApiModelProperty(value = "打开方式 (1组件 2内链 3外链)")
private Integer targetType;
/**
* 定位标识 (打开方式为组件时其值为组件相对路径其他为URL地址)
*/
@ApiModelProperty(value = "定位标识 (打开方式为组件时其值为组件相对路径其他为URL地址)")
private String uri;
/**
* 显示排序
*/
@ApiModelProperty(value = "显示排序")
private Integer sort;
/**
* 组件缓存0-开启1-关闭
*/
@ApiModelProperty(value = "组件缓存0-开启1-关闭")
private Integer keepAlive;
/**
* 隐藏菜单: 0-否1-是
*/
@ApiModelProperty(value = "隐藏菜单: 0-否1-是")
private Integer hidden;
/**
* 菜单类型 0目录1菜单2按钮
*/
@ApiModelProperty(value = "菜单类型 0目录1菜单2按钮")
private Integer type;
/**
* 备注信息
*/
@ApiModelProperty(value = "备注信息")
private String remarks;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
private LocalDateTime updateTime;
}

View File

@@ -0,0 +1,84 @@
package com.hccake.ballcat.admin.modules.sys.model.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 菜单权限视图对象
*
* @author hccake 2021-04-06 17:59:51
*/
@Data
@ApiModel(value = "菜单权限视图对象")
public class SysMenuRouterVO {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@ApiModelProperty(value = "菜单ID")
private Integer id;
/**
* 父级ID
*/
@ApiModelProperty(value = "父级ID")
private Integer parentId;
/**
* 菜单名称
*/
@ApiModelProperty(value = "菜单名称")
private String title;
/**
* 菜单图标
*/
@ApiModelProperty(value = "菜单图标")
private String icon;
/**
* 路由地址
*/
@ApiModelProperty(value = "路由地址")
private String path;
/**
* 打开方式 (1组件 2内链 3外链)
*/
@ApiModelProperty(value = "打开方式 (1组件 2内链 3外链)")
private Integer targetType;
/**
* 定位标识 (打开方式为组件时其值为组件相对路径其他为URL地址)
*/
@ApiModelProperty(value = "定位标识 (打开方式为组件时其值为组件相对路径其他为URL地址)")
private String uri;
/**
* 组件缓存0-开启1-关闭
*/
@ApiModelProperty(value = "组件缓存0-开启1-关闭")
private Integer keepAlive;
/**
* 隐藏菜单: 0-否1-是
*/
@ApiModelProperty(value = "隐藏菜单: 0-否1-是")
private Integer hidden;
/**
* 菜单类型 0目录1菜单2按钮
*/
@ApiModelProperty(value = "菜单类型 0目录1菜单2按钮")
private Integer type;
/**
* 备注信息
*/
@ApiModelProperty(value = "备注信息")
private String remarks;
}

View File

@@ -0,0 +1,30 @@
package com.hccake.ballcat.admin.modules.sys.service;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysMenuQO;
import com.hccake.extend.mybatis.plus.service.ExtendService;
import java.util.List;
/**
* 菜单权限
*
* @author hccake 2021-04-06 17:59:51
*/
public interface SysMenuService extends ExtendService<SysMenu> {
/**
* 查询权限集合并按sort排序升序
* @param sysMenuQO 查询条件
* @return List<SysMenu>
*/
List<SysMenu> listOrderBySort(SysMenuQO sysMenuQO);
/**
* 根据角色标识查询对应的菜单
* @param roleCode 角色标识
* @return List<SysMenu>
*/
List<SysMenu> listByRoleCode(String roleCode);
}

View File

@@ -1,32 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.service;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysPermission;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import com.hccake.extend.mybatis.plus.service.ExtendService;
import java.util.List;
/**
* <p>
* 菜单权限表 服务类
* </p>
*
* @author hccake
* @since 2017-10-29
*/
public interface SysPermissionService extends ExtendService<SysPermission> {
/**
* 通过角色编号查询URL 权限
* @param roleCode 角色Code
* @return 菜单列表
*/
List<PermissionVO> listVOByRoleCode(String roleCode);
/**
* 查询权限集合并按sort排序升序
* @return List<SysPermission>
*/
List<SysPermission> listOrderBySort();
}

View File

@@ -1,6 +1,6 @@
package com.hccake.ballcat.admin.modules.sys.service;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRolePermission;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRoleMenu;
import com.hccake.extend.mybatis.plus.service.ExtendService;
import java.io.Serializable;
@@ -13,21 +13,21 @@ import java.io.Serializable;
* @author hccake
* @since 2017-10-29
*/
public interface SysRolePermissionService extends ExtendService<SysRolePermission> {
public interface SysRoleMenuService extends ExtendService<SysRoleMenu> {
/**
* 更新角色菜单
* @param roleCode 角色
* @param permissionIds 权限ID数组
* @param menuIds 权限ID数组
* @return 更新角色权限关联关系是否成功
*/
Boolean saveRolePermissions(String roleCode, Integer[] permissionIds);
Boolean saveRoleMenus(String roleCode, Integer[] menuIds);
/**
* 根据权限ID删除角色权限关联数据
* @param permissionId 权限ID
* @param menuId 权限ID
*/
void deleteByPermissionId(Serializable permissionId);
void deleteByMenuId(Serializable menuId);
/**
* 根据角色标识删除角色权限关联关系

View File

@@ -0,0 +1,64 @@
package com.hccake.ballcat.admin.modules.sys.service.impl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.hccake.ballcat.admin.modules.sys.mapper.SysMenuMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysMenuQO;
import com.hccake.ballcat.admin.modules.sys.service.SysMenuService;
import com.hccake.ballcat.admin.modules.sys.service.SysRoleMenuService;
import com.hccake.ballcat.common.core.exception.BusinessException;
import com.hccake.ballcat.common.model.result.BaseResultCode;
import com.hccake.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
/**
* 菜单权限
*
* @author hccake 2021-04-06 17:59:51
*/
@Service
@RequiredArgsConstructor
public class SysMenuServiceImpl extends ExtendServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
private final SysRoleMenuService sysRoleMenuService;
/**
* 查询权限集合并按sort排序升序
* @param sysMenuQO 查询条件
* @return List<SysMenu>
*/
@Override
public List<SysMenu> listOrderBySort(SysMenuQO sysMenuQO) {
return baseMapper.listOrderBySort(sysMenuQO);
}
/**
* 根据角色标识查询对应的菜单
* @param roleCode 角色标识
* @return List<SysMenu>
*/
@Override
public List<SysMenu> listByRoleCode(String roleCode) {
return baseMapper.listByRoleCode(roleCode);
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean removeById(Serializable id) {
// 查询当前权限是否有子权限
Integer subMenu = baseMapper.countSubMenu(id);
if (subMenu != null && subMenu > 0) {
throw new BusinessException(BaseResultCode.LOGIC_CHECK_ERROR.getCode(), "菜单含有下级不能删除");
}
// 删除角色权限关联数据
sysRoleMenuService.deleteByMenuId(id);
// 删除当前菜单及其子菜单
return SqlHelper.retBool(baseMapper.deleteById(id));
}
}

View File

@@ -1,62 +0,0 @@
package com.hccake.ballcat.admin.modules.sys.service.impl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.hccake.ballcat.admin.modules.sys.mapper.SysPermissionMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysPermission;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import com.hccake.ballcat.admin.modules.sys.service.SysPermissionService;
import com.hccake.ballcat.admin.modules.sys.service.SysRolePermissionService;
import com.hccake.ballcat.common.core.exception.BusinessException;
import com.hccake.ballcat.common.model.result.BaseResultCode;
import com.hccake.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.Serializable;
import java.util.List;
/**
* <p>
* 菜单权限表 服务实现类
* </p>
*
* @author hccake
* @since 2017-10-29
*/
@Service
@RequiredArgsConstructor
public class SysPermissionServiceImpl extends ExtendServiceImpl<SysPermissionMapper, SysPermission>
implements SysPermissionService {
private final SysRolePermissionService sysRolePermissionService;
@Override
public List<PermissionVO> listVOByRoleCode(String roleCode) {
return baseMapper.listVOByRoleCode(roleCode);
}
/**
* 查询权限集合并按sort排序升序
* @return List<SysPermission>
*/
@Override
public List<SysPermission> listOrderBySort() {
return baseMapper.listOrderBySort();
}
@Override
@Transactional(rollbackFor = Exception.class)
public boolean removeById(Serializable id) {
// 查询当前权限是否有子权限
Integer subPermissionNum = baseMapper.countSubPermission(id);
if (subPermissionNum != null && subPermissionNum > 0) {
throw new BusinessException(BaseResultCode.LOGIC_CHECK_ERROR.getCode(), "菜单含有下级不能删除");
}
// 删除角色权限关联数据
sysRolePermissionService.deleteByPermissionId(id);
// 删除当前菜单及其子菜单
return SqlHelper.retBool(baseMapper.deleteById(id));
}
}

View File

@@ -2,9 +2,9 @@
package com.hccake.ballcat.admin.modules.sys.service.impl;
import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
import com.hccake.ballcat.admin.modules.sys.mapper.SysRolePermissionMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRolePermission;
import com.hccake.ballcat.admin.modules.sys.service.SysRolePermissionService;
import com.hccake.ballcat.admin.modules.sys.mapper.SysRoleMenuMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRoleMenu;
import com.hccake.ballcat.admin.modules.sys.service.SysRoleMenuService;
import com.hccake.extend.mybatis.plus.service.impl.ExtendServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -22,25 +22,25 @@ import java.util.stream.Collectors;
* @author hccake
*/
@Service
public class SysRolePermissionServiceImpl extends ExtendServiceImpl<SysRolePermissionMapper, SysRolePermission>
implements SysRolePermissionService {
public class SysRoleMenuServiceImpl extends ExtendServiceImpl<SysRoleMenuMapper, SysRoleMenu>
implements SysRoleMenuService {
/**
* @param roleCode 角色
* @param permissionIds 权限ID集合
* @param menuIds 权限ID集合
* @return boolean
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveRolePermissions(String roleCode, Integer[] permissionIds) {
public Boolean saveRoleMenus(String roleCode, Integer[] menuIds) {
// 1先删除旧数据
baseMapper.deleteByRoleCode(roleCode);
if (permissionIds == null || permissionIds.length == 0) {
if (menuIds == null || menuIds.length == 0) {
return Boolean.TRUE;
}
// 2再批量插入新数据
List<SysRolePermission> list = Arrays.stream(permissionIds).map(id -> new SysRolePermission(roleCode, id))
List<SysRoleMenu> list = Arrays.stream(menuIds).map(menuId -> new SysRoleMenu(roleCode, menuId))
.collect(Collectors.toList());
int i = baseMapper.insertBatchSomeColumn(list);
return SqlHelper.retBool(i);
@@ -48,11 +48,11 @@ public class SysRolePermissionServiceImpl extends ExtendServiceImpl<SysRolePermi
/**
* 根据权限ID删除角色权限关联数据
* @param permissionId 权限ID
* @param menuId 权限ID
*/
@Override
public void deleteByPermissionId(Serializable permissionId) {
baseMapper.deleteByPermissionId(permissionId);
public void deleteByMenuId(Serializable menuId) {
baseMapper.deleteByMenuId(menuId);
}
/**

View File

@@ -5,7 +5,7 @@ import com.hccake.ballcat.admin.modules.sys.mapper.SysRoleMapper;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRole;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysRoleQO;
import com.hccake.ballcat.admin.modules.sys.model.vo.SysRolePageVO;
import com.hccake.ballcat.admin.modules.sys.service.SysRolePermissionService;
import com.hccake.ballcat.admin.modules.sys.service.SysRoleMenuService;
import com.hccake.ballcat.admin.modules.sys.service.SysRoleService;
import com.hccake.ballcat.common.model.domain.PageParam;
import com.hccake.ballcat.common.model.domain.PageResult;
@@ -30,7 +30,7 @@ import java.util.List;
@RequiredArgsConstructor
public class SysRoleServiceImpl extends ExtendServiceImpl<SysRoleMapper, SysRole> implements SysRoleService {
private final SysRolePermissionService sysRolePermissionService;
private final SysRoleMenuService sysRoleMenuService;
/**
* 查询系统角色列表
@@ -52,7 +52,7 @@ public class SysRoleServiceImpl extends ExtendServiceImpl<SysRoleMapper, SysRole
@Transactional(rollbackFor = Exception.class)
public boolean removeById(Serializable id) {
SysRole role = getById(id);
sysRolePermissionService.deleteByRoleCode(role.getCode());
sysRoleMenuService.deleteByRoleCode(role.getCode());
return SqlHelper.retBool(baseMapper.deleteById(id));
}

View File

@@ -13,10 +13,10 @@ import com.hccake.ballcat.admin.modules.sys.converter.SysUserConverter;
import com.hccake.ballcat.admin.modules.sys.model.dto.SysUserDTO;
import com.hccake.ballcat.admin.modules.sys.model.dto.SysUserScope;
import com.hccake.ballcat.admin.modules.sys.model.dto.UserInfoDTO;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysRole;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysUserQO;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import com.hccake.ballcat.admin.modules.sys.model.vo.SysUserPageVO;
import com.hccake.ballcat.admin.modules.sys.service.*;
import com.hccake.ballcat.common.model.domain.PageParam;
@@ -49,7 +49,7 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
private final FileService fileService;
private final SysPermissionService sysPermissionService;
private final SysMenuService sysMenuService;
private final SysUserRoleService sysUserRoleService;
@@ -112,11 +112,11 @@ public class SysUserServiceImpl extends ExtendServiceImpl<SysUserMapper, SysUser
// 设置权限列表permission
Set<String> permissions = new HashSet<>();
roles.forEach(code -> {
List<String> permissionList = sysPermissionService.listVOByRoleCode(code).stream()
.map(PermissionVO::getCode).filter(StrUtil::isNotEmpty).collect(Collectors.toList());
for (String roleCode : roles) {
List<String> permissionList = sysMenuService.listByRoleCode(roleCode).stream().map(SysMenu::getPermission)
.filter(StrUtil::isNotEmpty).collect(Collectors.toList());
permissions.addAll(permissionList);
});
}
userInfoDTO.setPermissions(new ArrayList<>(permissions));
return userInfoDTO;
}

View File

@@ -1,38 +0,0 @@
<?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="com.hccake.ballcat.admin.modules.sys.mapper.SysPermissionMapper">
<sql id="Base_Alias_Column_List">
sp.id,
sp.title,
sp.code,
sp.path,
sp.router_name,
sp.component,
sp.redirect,
sp.target,
sp.parent_id,
sp.icon,
sp.sort,
sp.keep_alive,
sp.hidden,
sp.type,
sp.deleted,
sp.create_time,
sp.update_time
</sql>
<!--通过角色查询菜单信息-->
<select id="listVOByRoleCode" resultType="com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO">
SELECT
<include refid="Base_Alias_Column_List"/>
FROM
sys_permission sp
LEFT JOIN sys_role_permission rm ON sp.id = rm.permission_id
WHERE
sp.deleted = 0
AND rm.role_code = #{roleCode}
ORDER BY
sp.sort DESC
</select>
</mapper>

View File

@@ -0,0 +1,75 @@
<?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="com.hccake.ballcat.admin.modules.sys.mapper.SysMenuMapper">
<resultMap id="sysMenuMap" type="com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu">
<id property="id" column="id"/>
<result property="parentId" column="parent_id"/>
<result property="title" column="title"/>
<result property="icon" column="icon"/>
<result property="permission" column="permission"/>
<result property="path" column="path"/>
<result property="targetType" column="target_type"/>
<result property="uri" column="uri"/>
<result property="sort" column="sort"/>
<result property="keepAlive" column="keep_alive"/>
<result property="hidden" column="hidden"/>
<result property="type" column="type"/>
<result property="remarks" column="remarks"/>
<result property="deleted" column="deleted"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<sql id="Base_Column_List">
id,
parent_id,
title,
icon,
permission,
path,
target_type,
uri,
sort,
keep_alive,
hidden,
type,
remarks,
deleted,
create_time,
update_time
</sql>
<sql id="Base_Alias_Column_List">
sm.id,
sm.parent_id,
sm.title,
sm.icon,
sm.permission,
sm.path,
sm.target_type,
sm.uri,
sm.sort,
sm.keep_alive,
sm.hidden,
sm.type,
sm.remarks,
sm.deleted,
sm.create_time,
sm.update_time
</sql>
<!--通过角色查询菜单信息-->
<select id="listByRoleCode" resultType="com.hccake.ballcat.admin.modules.sys.model.entity.SysMenu">
SELECT
<include refid="Base_Alias_Column_List"/>
FROM
sys_menu sm
LEFT JOIN sys_role_menu rm ON sm.id = rm.menu_id
WHERE
sm.deleted = 0
AND rm.role_code = #{roleCode}
ORDER BY
sm.sort DESC
</select>
</mapper>

74
doc/update_sql/0.1.0.sql Normal file
View File

@@ -0,0 +1,74 @@
-- 新建菜单表
CREATE TABLE `sys_menu` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '父级ID',
`title` varchar(32) DEFAULT NULL COMMENT '菜单名称',
`icon` varchar(32) DEFAULT NULL COMMENT '菜单图标',
`permission` varchar(32) DEFAULT NULL COMMENT '授权标识',
`path` varchar(128) DEFAULT NULL COMMENT '路由地址',
`target_type` tinyint(1) DEFAULT '1' COMMENT '打开方式 (1组件 2内链 3外链)',
`uri` varchar(128) DEFAULT '' COMMENT '定位标识 (打开方式为组件时其值为组件相对路径其他为URL地址)',
`sort` int(11) DEFAULT '1' COMMENT '显示排序',
`keep_alive` tinyint(1) DEFAULT '0' COMMENT '组件缓存0-开启1-关闭',
`hidden` tinyint(1) DEFAULT '0' COMMENT '隐藏菜单: 0-否1-是',
`type` tinyint(1) DEFAULT '0' COMMENT '菜单类型 0目录1菜单2按钮',
`remarks` varchar(50) DEFAULT NULL COMMENT '备注信息',
`deleted` bigint(20) DEFAULT NULL COMMENT '逻辑删除标识,未删除为 0已删除为删除时间',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='菜单权限';
-- 权限表数据到菜单表数据的转换
INSERT INTO `sys_menu` (
`id`,
`parent_id`,
`title`,
`icon`,
`permission`,
`path`,
`target_type`,
`uri`,
`sort`,
`keep_alive`,
`hidden`,
`type`,
`deleted`,
`create_time`,
`update_time`
) (
SELECT
`id`,
`parent_id`,
`title`,
`icon`,
`code` AS `permission`,
SUBSTRING_INDEX( `path`, '/', - 1 ),
CASE
`target`
WHEN '_blank' THEN
2 ELSE 1
END AS `target_type`,
CASE
`type`
WHEN 1 THEN
`component` ELSE NULL
END AS `uri`,
`sort`,
`keep_alive`,
`hidden`,
`type`,
`deleted`,
`create_time`,
`update_time`
FROM
sys_permission
)
-- 角色权限关联表修改
RENAME TABLE `sys_role_permission` TO `sys_role_menu`;
ALTER TABLE `sys_role_menu`
CHANGE COLUMN `permission_id` `menu_id` int(11) NOT NULL COMMENT '菜单ID' AFTER `role_code`;
-- 删除权限表
DROP TABLE `sys_permission`;