refactor: 项目结构优化
This commit is contained in:
@@ -1,18 +0,0 @@
|
|||||||
package com.youlai.system.common.constant;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Security常量
|
|
||||||
*
|
|
||||||
* @author haoxr
|
|
||||||
* @date 2022/10/22
|
|
||||||
*/
|
|
||||||
public interface SecurityConstants {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 授权角色的前缀
|
|
||||||
* <p>
|
|
||||||
* 区分角色与权限标识
|
|
||||||
*/
|
|
||||||
String ROLE_PREFIX = "ROLE_";
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -17,7 +17,7 @@ public interface SystemConstants {
|
|||||||
/**
|
/**
|
||||||
* 系统默认密码
|
* 系统默认密码
|
||||||
*/
|
*/
|
||||||
String DEFAULT_USER_PASSWORD = "123456";
|
String DEFAULT_PASSWORD = "123456";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 超级管理员角色编码
|
* 超级管理员角色编码
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import javax.servlet.ServletException;
|
|||||||
import javax.validation.ConstraintViolation;
|
import javax.validation.ConstraintViolation;
|
||||||
import javax.validation.ConstraintViolationException;
|
import javax.validation.ConstraintViolationException;
|
||||||
import java.sql.SQLSyntaxErrorException;
|
import java.sql.SQLSyntaxErrorException;
|
||||||
import java.util.concurrent.CompletionException;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ public enum ResultCode implements IResultCode, Serializable {
|
|||||||
USERNAME_OR_PASSWORD_ERROR("A0210", "用户名或密码错误"),
|
USERNAME_OR_PASSWORD_ERROR("A0210", "用户名或密码错误"),
|
||||||
PASSWORD_ENTER_EXCEED_LIMIT("A0211", "用户输入密码次数超限"),
|
PASSWORD_ENTER_EXCEED_LIMIT("A0211", "用户输入密码次数超限"),
|
||||||
CLIENT_AUTHENTICATION_FAILED("A0212", "客户端认证失败"),
|
CLIENT_AUTHENTICATION_FAILED("A0212", "客户端认证失败"),
|
||||||
TOKEN_INVALID_OR_EXPIRED("A0230", "token无效或已过期"),
|
TOKEN_INVALID("A0230", "token无效或已过期"),
|
||||||
TOKEN_ACCESS_FORBIDDEN("A0231", "token已被禁止访问"),
|
TOKEN_ACCESS_FORBIDDEN("A0231", "token已被禁止访问"),
|
||||||
|
|
||||||
AUTHORIZED_ERROR("A0300", "访问权限异常"),
|
AUTHORIZED_ERROR("A0300", "访问权限异常"),
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.youlai.system.config;
|
package com.youlai.system.config;
|
||||||
|
|
||||||
import com.youlai.system.filter.JwtAuthenticationFilter;
|
import com.youlai.system.security.filter.JwtAuthenticationFilter;
|
||||||
import com.youlai.system.security.exception.MyAccessDeniedHandler;
|
import com.youlai.system.security.exception.MyAccessDeniedHandler;
|
||||||
import com.youlai.system.security.exception.MyAuthenticationEntryPoint;
|
import com.youlai.system.security.exception.MyAuthenticationEntryPoint;
|
||||||
import com.youlai.system.security.jwt.JwtTokenManager;
|
import com.youlai.system.security.jwt.JwtTokenManager;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.youlai.system.controller;
|
package com.youlai.system.controller;
|
||||||
|
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.common.result.Result;
|
import com.youlai.system.common.result.Result;
|
||||||
import com.youlai.system.pojo.form.DeptForm;
|
import com.youlai.system.pojo.form.DeptForm;
|
||||||
import com.youlai.system.pojo.query.DeptQuery;
|
import com.youlai.system.pojo.query.DeptQuery;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.youlai.system.controller;
|
package com.youlai.system.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.common.result.PageResult;
|
import com.youlai.system.common.result.PageResult;
|
||||||
import com.youlai.system.common.result.Result;
|
import com.youlai.system.common.result.Result;
|
||||||
import com.youlai.system.pojo.form.DictTypeForm;
|
import com.youlai.system.pojo.form.DictTypeForm;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.youlai.system.controller;
|
package com.youlai.system.controller;
|
||||||
|
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.common.result.Result;
|
import com.youlai.system.common.result.Result;
|
||||||
import com.youlai.system.pojo.entity.SysMenu;
|
import com.youlai.system.pojo.entity.SysMenu;
|
||||||
import com.youlai.system.pojo.query.MenuQuery;
|
import com.youlai.system.pojo.query.MenuQuery;
|
||||||
|
|||||||
@@ -1,12 +1,11 @@
|
|||||||
package com.youlai.system.controller;
|
package com.youlai.system.controller;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.common.result.PageResult;
|
import com.youlai.system.common.result.PageResult;
|
||||||
import com.youlai.system.common.result.Result;
|
import com.youlai.system.common.result.Result;
|
||||||
import com.youlai.system.pojo.entity.SysRole;
|
import com.youlai.system.pojo.entity.SysRole;
|
||||||
import com.youlai.system.pojo.form.RoleForm;
|
import com.youlai.system.pojo.form.RoleForm;
|
||||||
import com.youlai.system.pojo.form.RoleResourceForm;
|
|
||||||
import com.youlai.system.pojo.query.RolePageQuery;
|
import com.youlai.system.pojo.query.RolePageQuery;
|
||||||
import com.youlai.system.pojo.vo.role.RolePageVO;
|
import com.youlai.system.pojo.vo.role.RolePageVO;
|
||||||
import com.youlai.system.service.SysRoleService;
|
import com.youlai.system.service.SysRoleService;
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class SysUserController {
|
|||||||
|
|
||||||
@ApiOperation(value = "新增用户")
|
@ApiOperation(value = "新增用户")
|
||||||
@PostMapping
|
@PostMapping
|
||||||
@PreAuthorize("hasAuthority('sys:user:add')")
|
@PreAuthorize("@pms.hasPermission('sys:user:add')")
|
||||||
public Result saveUser(
|
public Result saveUser(
|
||||||
@RequestBody @Valid UserForm userForm
|
@RequestBody @Valid UserForm userForm
|
||||||
) {
|
) {
|
||||||
@@ -73,7 +73,7 @@ public class SysUserController {
|
|||||||
|
|
||||||
@ApiOperation(value = "修改用户")
|
@ApiOperation(value = "修改用户")
|
||||||
@PutMapping(value = "/{userId}")
|
@PutMapping(value = "/{userId}")
|
||||||
@PreAuthorize("hasAuthority('sys:user:edit')")
|
@PreAuthorize("@pms.hasPermission('sys:user:edit')")
|
||||||
public Result updateUser(
|
public Result updateUser(
|
||||||
@ApiParam("用户ID") @PathVariable Long userId,
|
@ApiParam("用户ID") @PathVariable Long userId,
|
||||||
@RequestBody @Validated UserForm userForm) {
|
@RequestBody @Validated UserForm userForm) {
|
||||||
@@ -83,7 +83,7 @@ public class SysUserController {
|
|||||||
|
|
||||||
@ApiOperation(value = "删除用户")
|
@ApiOperation(value = "删除用户")
|
||||||
@DeleteMapping("/{ids}")
|
@DeleteMapping("/{ids}")
|
||||||
@PreAuthorize("hasAuthority('sys:user:delete')")
|
@PreAuthorize("@pms.hasPermission('sys:user:delete')")
|
||||||
public Result deleteUsers(
|
public Result deleteUsers(
|
||||||
@ApiParam("用户ID,多个以英文逗号(,)分割") @PathVariable String ids
|
@ApiParam("用户ID,多个以英文逗号(,)分割") @PathVariable String ids
|
||||||
) {
|
) {
|
||||||
@@ -152,6 +152,7 @@ public class SysUserController {
|
|||||||
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
|
||||||
|
|
||||||
List<UserExportVO> exportUserList = userService.listExportUsers(queryParams);
|
List<UserExportVO> exportUserList = userService.listExportUsers(queryParams);
|
||||||
EasyExcel.write(response.getOutputStream(), UserExportVO.class).sheet("用户列表").doWrite(exportUserList);
|
EasyExcel.write(response.getOutputStream(), UserExportVO.class).sheet("用户列表")
|
||||||
|
.doWrite(exportUserList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,5 +15,4 @@ public interface MenuConverter {
|
|||||||
|
|
||||||
MenuVO entity2VO(SysMenu entity);
|
MenuVO entity2VO(SysMenu entity);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.youlai.system.converter;
|
package com.youlai.system.converter;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.pojo.entity.SysRole;
|
import com.youlai.system.pojo.entity.SysRole;
|
||||||
import com.youlai.system.pojo.form.RoleForm;
|
import com.youlai.system.pojo.form.RoleForm;
|
||||||
import com.youlai.system.pojo.vo.role.RolePageVO;
|
import com.youlai.system.pojo.vo.role.RolePageVO;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ import org.mapstruct.Mappings;
|
|||||||
public interface UserConverter {
|
public interface UserConverter {
|
||||||
|
|
||||||
@Mappings({
|
@Mappings({
|
||||||
@Mapping(target = "genderLabel", expression = "java(com.youlai.system.common.base.IBaseEnum.getLabelByValue(po.getGender(), com.youlai.system.common.enums.GenderEnum.class))")
|
@Mapping(target = "genderLabel", expression = "java(com.youlai.system.common.base.IBaseEnum.getLabelByValue(po.getGender(), com.youlai.system.enums.GenderEnum.class))")
|
||||||
})
|
})
|
||||||
UserVO po2Vo(UserBO po);
|
UserVO po2Vo(UserBO po);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.youlai.system.common.enums;
|
package com.youlai.system.enums;
|
||||||
|
|
||||||
import com.youlai.system.common.base.IBaseEnum;
|
import com.youlai.system.common.base.IBaseEnum;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.youlai.system.common.enums;
|
package com.youlai.system.enums;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||||
import com.youlai.system.common.base.IBaseEnum;
|
import com.youlai.system.common.base.IBaseEnum;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.youlai.system.common.enums;
|
package com.youlai.system.enums;
|
||||||
|
|
||||||
import com.youlai.system.common.base.IBaseEnum;
|
import com.youlai.system.common.base.IBaseEnum;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -4,8 +4,17 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
|||||||
import com.youlai.system.pojo.entity.SysRole;
|
import com.youlai.system.pojo.entity.SysRole;
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface SysRoleMapper extends BaseMapper<SysRole> {
|
public interface SysRoleMapper extends BaseMapper<SysRole> {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取最大范围的数据权限
|
||||||
|
*
|
||||||
|
* @param roles
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Integer getMaximumDataScope(Set<String> roles);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package com.youlai.system.common.model;
|
package com.youlai.system.pojo;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
@@ -2,7 +2,7 @@ package com.youlai.system.pojo.bo;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.youlai.system.common.enums.MenuTypeEnum;
|
import com.youlai.system.enums.MenuTypeEnum;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
package com.youlai.system.pojo.entity;
|
package com.youlai.system.pojo.entity;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.annotation.IdType;
|
import com.baomidou.mybatisplus.annotation.IdType;
|
||||||
import com.baomidou.mybatisplus.annotation.TableField;
|
|
||||||
import com.baomidou.mybatisplus.annotation.TableId;
|
import com.baomidou.mybatisplus.annotation.TableId;
|
||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
import com.youlai.system.common.base.BaseEntity;
|
import com.youlai.system.common.base.BaseEntity;
|
||||||
import com.youlai.system.common.enums.MenuTypeEnum;
|
import com.youlai.system.enums.MenuTypeEnum;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -58,4 +58,9 @@ public class SysRole implements Serializable {
|
|||||||
|
|
||||||
@TableField(exist = false)
|
@TableField(exist = false)
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 数据权限
|
||||||
|
*/
|
||||||
|
private Integer dataScope;
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.youlai.system.pojo.vo.menu;
|
package com.youlai.system.pojo.vo.menu;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonInclude;
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import com.youlai.system.common.enums.MenuTypeEnum;
|
import com.youlai.system.enums.MenuTypeEnum;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ import java.io.IOException;
|
|||||||
public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint {
|
public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint {
|
||||||
@Override
|
@Override
|
||||||
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
|
public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
|
||||||
ResponseUtils.writeErrMsg(response, ResultCode.TOKEN_INVALID_OR_EXPIRED);
|
ResponseUtils.writeErrMsg(response, ResultCode.TOKEN_INVALID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Spring Security
|
* Spring Security
|
||||||
|
*
|
||||||
* @author haoxr
|
* @author haoxr
|
||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@@ -30,10 +31,12 @@ public class SysUserDetails implements UserDetails {
|
|||||||
|
|
||||||
private Collection<SimpleGrantedAuthority> authorities;
|
private Collection<SimpleGrantedAuthority> authorities;
|
||||||
|
|
||||||
private String authorityStr;
|
|
||||||
|
|
||||||
private Set<String> perms;
|
private Set<String> perms;
|
||||||
|
|
||||||
|
private Long deptId;
|
||||||
|
|
||||||
|
private Integer dataScope;
|
||||||
|
|
||||||
public SysUserDetails() {
|
public SysUserDetails() {
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -54,6 +57,8 @@ public class SysUserDetails implements UserDetails {
|
|||||||
this.password = user.getPassword();
|
this.password = user.getPassword();
|
||||||
this.enabled = ObjectUtil.equal(user.getStatus(), 1);
|
this.enabled = ObjectUtil.equal(user.getStatus(), 1);
|
||||||
this.perms = user.getPerms();
|
this.perms = user.getPerms();
|
||||||
|
this.deptId = user.getDeptId();
|
||||||
|
this.dataScope = user.getDataScope();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getUserId() {
|
public Long getUserId() {
|
||||||
|
|||||||
@@ -9,11 +9,13 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 用户认证信息实现类
|
||||||
|
*
|
||||||
* @author haoxr
|
* @author haoxr
|
||||||
*/
|
*/
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SysUserDetailsServiceImpl implements UserDetailsService {
|
public class SysUserDetailsService implements UserDetailsService {
|
||||||
|
|
||||||
private final SysUserService sysUserService;
|
private final SysUserService sysUserService;
|
||||||
|
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.youlai.system.service;
|
package com.youlai.system.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.pojo.entity.SysDept;
|
import com.youlai.system.pojo.entity.SysDept;
|
||||||
import com.youlai.system.pojo.form.DeptForm;
|
import com.youlai.system.pojo.form.DeptForm;
|
||||||
import com.youlai.system.pojo.query.DeptQuery;
|
import com.youlai.system.pojo.query.DeptQuery;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package com.youlai.system.service;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.pojo.entity.SysDictType;
|
import com.youlai.system.pojo.entity.SysDictType;
|
||||||
import com.youlai.system.pojo.form.DictTypeForm;
|
import com.youlai.system.pojo.form.DictTypeForm;
|
||||||
import com.youlai.system.pojo.query.DictTypePageQuery;
|
import com.youlai.system.pojo.query.DictTypePageQuery;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.youlai.system.service;
|
package com.youlai.system.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.pojo.entity.SysMenu;
|
import com.youlai.system.pojo.entity.SysMenu;
|
||||||
import com.youlai.system.pojo.query.MenuQuery;
|
import com.youlai.system.pojo.query.MenuQuery;
|
||||||
import com.youlai.system.pojo.vo.menu.MenuVO;
|
import com.youlai.system.pojo.vo.menu.MenuVO;
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ package com.youlai.system.service;
|
|||||||
|
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.pojo.entity.SysRole;
|
import com.youlai.system.pojo.entity.SysRole;
|
||||||
import com.youlai.system.pojo.form.RoleForm;
|
import com.youlai.system.pojo.form.RoleForm;
|
||||||
import com.youlai.system.pojo.form.RoleResourceForm;
|
|
||||||
import com.youlai.system.pojo.query.RolePageQuery;
|
import com.youlai.system.pojo.query.RolePageQuery;
|
||||||
import com.youlai.system.pojo.vo.role.RolePageVO;
|
import com.youlai.system.pojo.vo.role.RolePageVO;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色业务接口层
|
* 角色业务接口层
|
||||||
@@ -78,4 +78,12 @@ public interface SysRoleService extends IService<SysRole> {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean updateRoleMenus(Long roleId, List<Long> menuIds);
|
boolean updateRoleMenus(Long roleId, List<Long> menuIds);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取最大范围的数据权限
|
||||||
|
*
|
||||||
|
* @param roles
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
Integer getMaximumDataScope(Set<String> roles);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import cn.hutool.core.util.StrUtil;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.youlai.system.common.constant.SystemConstants;
|
import com.youlai.system.common.constant.SystemConstants;
|
||||||
import com.youlai.system.common.enums.StatusEnum;
|
import com.youlai.system.enums.StatusEnum;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.converter.DeptConverter;
|
import com.youlai.system.converter.DeptConverter;
|
||||||
import com.youlai.system.mapper.SysDeptMapper;
|
import com.youlai.system.mapper.SysDeptMapper;
|
||||||
import com.youlai.system.pojo.entity.SysDept;
|
import com.youlai.system.pojo.entity.SysDept;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.converter.DictTypeConverter;
|
import com.youlai.system.converter.DictTypeConverter;
|
||||||
import com.youlai.system.mapper.SysDictTypeMapper;
|
import com.youlai.system.mapper.SysDictTypeMapper;
|
||||||
import com.youlai.system.pojo.entity.SysDictItem;
|
import com.youlai.system.pojo.entity.SysDictItem;
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.youlai.system.common.constant.SystemConstants;
|
import com.youlai.system.common.constant.SystemConstants;
|
||||||
import com.youlai.system.common.enums.MenuTypeEnum;
|
import com.youlai.system.enums.MenuTypeEnum;
|
||||||
import com.youlai.system.common.enums.StatusEnum;
|
import com.youlai.system.enums.StatusEnum;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.converter.MenuConverter;
|
import com.youlai.system.converter.MenuConverter;
|
||||||
import com.youlai.system.mapper.SysMenuMapper;
|
import com.youlai.system.mapper.SysMenuMapper;
|
||||||
import com.youlai.system.pojo.entity.SysMenu;
|
import com.youlai.system.pojo.entity.SysMenu;
|
||||||
|
|||||||
@@ -8,14 +8,13 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.youlai.system.common.constant.SystemConstants;
|
import com.youlai.system.common.constant.SystemConstants;
|
||||||
import com.youlai.system.common.model.Option;
|
import com.youlai.system.pojo.Option;
|
||||||
import com.youlai.system.converter.RoleConverter;
|
import com.youlai.system.converter.RoleConverter;
|
||||||
import com.youlai.system.mapper.SysRoleMapper;
|
import com.youlai.system.mapper.SysRoleMapper;
|
||||||
import com.youlai.system.pojo.entity.SysRole;
|
import com.youlai.system.pojo.entity.SysRole;
|
||||||
import com.youlai.system.pojo.entity.SysRoleMenu;
|
import com.youlai.system.pojo.entity.SysRoleMenu;
|
||||||
import com.youlai.system.pojo.entity.SysUserRole;
|
import com.youlai.system.pojo.entity.SysUserRole;
|
||||||
import com.youlai.system.pojo.form.RoleForm;
|
import com.youlai.system.pojo.form.RoleForm;
|
||||||
import com.youlai.system.pojo.form.RoleResourceForm;
|
|
||||||
import com.youlai.system.pojo.query.RolePageQuery;
|
import com.youlai.system.pojo.query.RolePageQuery;
|
||||||
import com.youlai.system.pojo.vo.role.RolePageVO;
|
import com.youlai.system.pojo.vo.role.RolePageVO;
|
||||||
import com.youlai.system.service.SysRoleMenuService;
|
import com.youlai.system.service.SysRoleMenuService;
|
||||||
@@ -27,10 +26,7 @@ import org.springframework.cache.annotation.CacheEvict;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -193,4 +189,16 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取最大范围的数据权限
|
||||||
|
*
|
||||||
|
* @param roles
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Integer getMaximumDataScope(Set<String> roles) {
|
||||||
|
Integer dataScope = this.baseMapper.getMaximumDataScope(roles);
|
||||||
|
return dataScope;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import com.youlai.system.common.base.IBaseEnum;
|
import com.youlai.system.common.base.IBaseEnum;
|
||||||
import com.youlai.system.common.constant.SystemConstants;
|
import com.youlai.system.common.constant.SystemConstants;
|
||||||
import com.youlai.system.common.enums.GenderEnum;
|
|
||||||
import com.youlai.system.converter.UserConverter;
|
import com.youlai.system.converter.UserConverter;
|
||||||
|
import com.youlai.system.enums.GenderEnum;
|
||||||
import com.youlai.system.listener.UserImportListener;
|
import com.youlai.system.listener.UserImportListener;
|
||||||
import com.youlai.system.mapper.SysUserMapper;
|
import com.youlai.system.mapper.SysUserMapper;
|
||||||
import com.youlai.system.pojo.bo.UserBO;
|
import com.youlai.system.pojo.bo.UserBO;
|
||||||
@@ -31,15 +31,16 @@ import com.youlai.system.pojo.vo.user.UserExportVO;
|
|||||||
import com.youlai.system.pojo.vo.user.UserLoginVO;
|
import com.youlai.system.pojo.vo.user.UserLoginVO;
|
||||||
import com.youlai.system.pojo.vo.user.UserVO;
|
import com.youlai.system.pojo.vo.user.UserVO;
|
||||||
import com.youlai.system.service.SysMenuService;
|
import com.youlai.system.service.SysMenuService;
|
||||||
|
import com.youlai.system.service.SysRoleService;
|
||||||
import com.youlai.system.service.SysUserRoleService;
|
import com.youlai.system.service.SysUserRoleService;
|
||||||
import com.youlai.system.service.SysUserService;
|
import com.youlai.system.service.SysUserService;
|
||||||
import com.youlai.system.util.SecurityUtils;
|
import com.youlai.system.util.SecurityUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -62,11 +63,14 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
private final SysUserRoleService userRoleService;
|
private final SysUserRoleService userRoleService;
|
||||||
private final UserImportListener userImportListener;
|
private final UserImportListener userImportListener;
|
||||||
|
|
||||||
@Resource
|
private final UserConverter userConverter;
|
||||||
private UserConverter userConverter;
|
|
||||||
|
|
||||||
private final SysMenuService menuService;
|
private final SysMenuService menuService;
|
||||||
|
|
||||||
|
private final SysRoleService roleService;
|
||||||
|
|
||||||
|
private final RedisTemplate redisTemplate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户分页列表
|
* 获取用户分页列表
|
||||||
*
|
*
|
||||||
@@ -122,7 +126,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
SysUser entity = userConverter.form2Entity(userForm);
|
SysUser entity = userConverter.form2Entity(userForm);
|
||||||
|
|
||||||
// 设置默认加密密码
|
// 设置默认加密密码
|
||||||
String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_USER_PASSWORD);
|
String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD);
|
||||||
entity.setPassword(defaultEncryptPwd);
|
entity.setPassword(defaultEncryptPwd);
|
||||||
|
|
||||||
// 新增用户
|
// 新增用户
|
||||||
@@ -217,6 +221,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
Set<String> perms = menuService.listRolePerms(roles);
|
Set<String> perms = menuService.listRolePerms(roles);
|
||||||
userAuthInfo.setPerms(perms);
|
userAuthInfo.setPerms(perms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取最大范围的数据权限
|
||||||
|
Integer dataScope = roleService.getMaximumDataScope(roles);
|
||||||
|
userAuthInfo.setDataScope(dataScope);
|
||||||
}
|
}
|
||||||
return userAuthInfo;
|
return userAuthInfo;
|
||||||
}
|
}
|
||||||
@@ -281,7 +289,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
user.setEmail(userItem.getEmail());
|
user.setEmail(userItem.getEmail());
|
||||||
user.setDeptId(deptId);
|
user.setDeptId(deptId);
|
||||||
// 默认密码
|
// 默认密码
|
||||||
user.setPassword(passwordEncoder.encode(SystemConstants.DEFAULT_USER_PASSWORD));
|
user.setPassword(passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD));
|
||||||
// 性别转换
|
// 性别转换
|
||||||
Integer gender = (Integer) IBaseEnum.getValueByLabel(userItem.getGender(), GenderEnum.class);
|
Integer gender = (Integer) IBaseEnum.getValueByLabel(userItem.getGender(), GenderEnum.class);
|
||||||
user.setGender(gender);
|
user.setGender(gender);
|
||||||
@@ -349,7 +357,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||||||
userLoginVO.setRoles(roles);
|
userLoginVO.setRoles(roles);
|
||||||
|
|
||||||
// 用户权限集合
|
// 用户权限集合
|
||||||
Set<String> perms = SecurityUtils.getPerms();
|
Set<String> perms = (Set<String>)redisTemplate.opsForValue().get("USER_PERMS:" + user.getId());
|
||||||
userLoginVO.setPerms(perms);
|
userLoginVO.setPerms(perms);
|
||||||
|
|
||||||
return userLoginVO;
|
return userLoginVO;
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class ResponseUtils {
|
|||||||
public static void writeErrMsg(HttpServletResponse response, ResultCode resultCode) throws IOException {
|
public static void writeErrMsg(HttpServletResponse response, ResultCode resultCode) throws IOException {
|
||||||
switch (resultCode) {
|
switch (resultCode) {
|
||||||
case ACCESS_UNAUTHORIZED:
|
case ACCESS_UNAUTHORIZED:
|
||||||
case TOKEN_INVALID_OR_EXPIRED:
|
case TOKEN_INVALID:
|
||||||
response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
response.setStatus(HttpStatus.UNAUTHORIZED.value());
|
||||||
break;
|
break;
|
||||||
case TOKEN_ACCESS_FORBIDDEN:
|
case TOKEN_ACCESS_FORBIDDEN:
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
package com.youlai.system.util;
|
package com.youlai.system.util;
|
||||||
|
|
||||||
import cn.hutool.core.collection.CollectionUtil;
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.youlai.system.common.constant.SystemConstants;
|
import com.youlai.system.common.constant.SystemConstants;
|
||||||
import com.youlai.system.security.userdetails.SysUserDetails;
|
import com.youlai.system.security.userdetails.SysUserDetails;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
import org.springframework.security.core.GrantedAuthority;
|
import org.springframework.security.core.GrantedAuthority;
|
||||||
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
||||||
import org.springframework.util.PatternMatchUtils;
|
import org.springframework.util.PatternMatchUtils;
|
||||||
import org.springframework.util.StringUtils;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -34,6 +33,37 @@ public class SecurityUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户ID
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Long getUserId() {
|
||||||
|
Long userId = Convert.toLong(getUser().getUserId());
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取部门ID
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Long getDeptId() {
|
||||||
|
Long userId = Convert.toLong(getUser().getDeptId());
|
||||||
|
return userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取数据权限范围
|
||||||
|
*
|
||||||
|
* @return DataScope
|
||||||
|
*/
|
||||||
|
public static Integer getDataScope() {
|
||||||
|
Integer dataScope = Convert.toInt(getUser().getDataScope());
|
||||||
|
return dataScope;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户角色集合
|
* 获取用户角色集合
|
||||||
*
|
*
|
||||||
@@ -41,17 +71,17 @@ public class SecurityUtils {
|
|||||||
*/
|
*/
|
||||||
public static Set<String> getRoles() {
|
public static Set<String> getRoles() {
|
||||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
if (authentication != null) {
|
||||||
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
Set<String> roles = null;
|
|
||||||
if (CollectionUtil.isNotEmpty(authorities)) {
|
if (CollectionUtil.isNotEmpty(authorities)) {
|
||||||
roles = authorities.stream().filter(item -> item.getAuthority().startsWith("ROLE_"))
|
Set<String> roles = authorities.stream().filter(item -> item.getAuthority().startsWith("ROLE_"))
|
||||||
.map(item -> StrUtil.removePrefix(item.getAuthority(), "ROLE_"))
|
.map(item -> StrUtil.removePrefix(item.getAuthority(), "ROLE_"))
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
} else {
|
|
||||||
roles = Collections.EMPTY_SET;
|
|
||||||
}
|
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return Collections.EMPTY_SET;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户权限集合
|
* 获取用户权限集合
|
||||||
@@ -60,17 +90,17 @@ public class SecurityUtils {
|
|||||||
*/
|
*/
|
||||||
public static Set<String> getPerms() {
|
public static Set<String> getPerms() {
|
||||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
if (authentication != null) {
|
||||||
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
|
||||||
Set<String> perms = null;
|
|
||||||
if (CollectionUtil.isNotEmpty(authorities)) {
|
if (CollectionUtil.isNotEmpty(authorities)) {
|
||||||
perms = authorities.stream().filter(item -> !item.getAuthority().startsWith("ROLE_"))
|
Set<String> perms = authorities.stream().filter(item -> !item.getAuthority().startsWith("ROLE_"))
|
||||||
.map(item -> item.getAuthority())
|
.map(item -> item.getAuthority())
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
} else {
|
|
||||||
perms = Collections.EMPTY_SET;
|
|
||||||
}
|
|
||||||
return perms;
|
return perms;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return Collections.EMPTY_SET;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 是否超级管理员
|
* 是否超级管理员
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
LEFT JOIN sys_role_menu t2 ON t1.id = t2.menu_id
|
LEFT JOIN sys_role_menu t2 ON t1.id = t2.menu_id
|
||||||
LEFT JOIN sys_role t3 ON t2.role_id = t3.id
|
LEFT JOIN sys_role t3 ON t2.role_id = t3.id
|
||||||
WHERE
|
WHERE
|
||||||
t1.type != '${@com.youlai.system.common.enums.MenuTypeEnum@BUTTON.getValue()}'
|
t1.type != '${@com.youlai.system.enums.MenuTypeEnum@BUTTON.getValue()}'
|
||||||
ORDER BY t1.sort asc
|
ORDER BY t1.sort asc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
INNER JOIN sys_role_menu t2
|
INNER JOIN sys_role_menu t2
|
||||||
INNER JOIN sys_role t3
|
INNER JOIN sys_role t3
|
||||||
WHERE
|
WHERE
|
||||||
t1.type = '${@com.youlai.system.common.enums.MenuTypeEnum@BUTTON.getValue()}'
|
t1.type = '${@com.youlai.system.enums.MenuTypeEnum@BUTTON.getValue()}'
|
||||||
AND t1.perm IS NOT NULL
|
AND t1.perm IS NOT NULL
|
||||||
<choose>
|
<choose>
|
||||||
<when test="roles!=null and roles.size()>0">
|
<when test="roles!=null and roles.size()>0">
|
||||||
|
|||||||
@@ -4,20 +4,24 @@
|
|||||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="com.youlai.system.mapper.SysRoleMapper">
|
<mapper namespace="com.youlai.system.mapper.SysRoleMapper">
|
||||||
|
|
||||||
<resultMap id="BaseResultMap" type="com.youlai.system.pojo.entity.SysRole">
|
<!-- 获取最大范围的数据权限 -->
|
||||||
<id property="id" column="id" jdbcType="BIGINT"/>
|
<select id="getMaximumDataScope" resultType="java.lang.Integer">
|
||||||
<result property="name" column="name" jdbcType="VARCHAR"/>
|
SELECT
|
||||||
<result property="code" column="code" jdbcType="VARCHAR"/>
|
min(data_scope)
|
||||||
<result property="sort" column="sort" jdbcType="INTEGER"/>
|
FROM
|
||||||
<result property="status" column="status" jdbcType="TINYINT"/>
|
sys_role
|
||||||
<result property="deleted" column="deleted" jdbcType="TINYINT"/>
|
<where>
|
||||||
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
|
<choose>
|
||||||
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
|
<when test="roles!=null and roles.size>0">
|
||||||
</resultMap>
|
AND code IN
|
||||||
|
<foreach collection="roles" item="role" separator="," open="(" close=")">
|
||||||
<sql id="Base_Column_List">
|
#{role}
|
||||||
id,name,code,
|
</foreach>
|
||||||
sort,status,deleted,
|
</when>
|
||||||
create_time,update_time
|
<otherwise>
|
||||||
</sql>
|
id = -1
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
Reference in New Issue
Block a user