From d257c411c1c0eb4d37fc9b3ed1f5aeb4a4b8432c Mon Sep 17 00:00:00 2001 From: haoxr <1490493387@qq.com> Date: Tue, 13 Dec 2022 00:34:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=A1=B9=E7=9B=AE=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/SecurityConstants.java | 18 ----- .../common/constant/SystemConstants.java | 2 +- .../exception/GlobalExceptionHandler.java | 1 - .../system/common/result/ResultCode.java | 2 +- .../youlai/system/config/SecurityConfig.java | 2 +- .../system/controller/SysDeptController.java | 2 +- .../controller/SysDictTypeController.java | 2 +- .../system/controller/SysMenuController.java | 2 +- .../system/controller/SysRoleController.java | 3 +- .../system/controller/SysUserController.java | 9 +-- .../system/converter/MenuConverter.java | 1 - .../system/converter/RoleConverter.java | 2 +- .../system/converter/UserConverter.java | 2 +- .../system/{common => }/enums/GenderEnum.java | 2 +- .../{common => }/enums/MenuTypeEnum.java | 2 +- .../system/{common => }/enums/StatusEnum.java | 2 +- .../youlai/system/mapper/SysRoleMapper.java | 9 +++ .../system/{common/model => pojo}/Option.java | 2 +- .../com/youlai/system/pojo/bo/RouteBO.java | 2 +- .../youlai/system/pojo/entity/SysMenu.java | 5 +- .../youlai/system/pojo/entity/SysRole.java | 5 ++ .../youlai/system/pojo/vo/menu/MenuVO.java | 2 +- .../exception/MyAuthenticationEntryPoint.java | 2 +- .../security/userdetails/SysUserDetails.java | 11 ++- ...ceImpl.java => SysUserDetailsService.java} | 4 +- .../youlai/system/service/SysDeptService.java | 2 +- .../system/service/SysDictTypeService.java | 2 +- .../youlai/system/service/SysMenuService.java | 2 +- .../youlai/system/service/SysRoleService.java | 12 +++- .../service/impl/SysDeptServiceImpl.java | 4 +- .../service/impl/SysDictTypeServiceImpl.java | 2 +- .../service/impl/SysMenuServiceImpl.java | 6 +- .../service/impl/SysRoleServiceImpl.java | 20 ++++-- .../service/impl/SysUserServiceImpl.java | 28 +++++--- .../com/youlai/system/util/ResponseUtils.java | 2 +- .../com/youlai/system/util/SecurityUtils.java | 70 +++++++++++++------ src/main/resources/mapper/SysMenuMapper.xml | 4 +- src/main/resources/mapper/SysRoleMapper.xml | 36 +++++----- 38 files changed, 171 insertions(+), 115 deletions(-) delete mode 100644 src/main/java/com/youlai/system/common/constant/SecurityConstants.java rename src/main/java/com/youlai/system/{common => }/enums/GenderEnum.java (91%) rename src/main/java/com/youlai/system/{common => }/enums/MenuTypeEnum.java (94%) rename src/main/java/com/youlai/system/{common => }/enums/StatusEnum.java (91%) rename src/main/java/com/youlai/system/{common/model => pojo}/Option.java (95%) rename src/main/java/com/youlai/system/security/userdetails/{SysUserDetailsServiceImpl.java => SysUserDetailsService.java} (90%) diff --git a/src/main/java/com/youlai/system/common/constant/SecurityConstants.java b/src/main/java/com/youlai/system/common/constant/SecurityConstants.java deleted file mode 100644 index 83be708a..00000000 --- a/src/main/java/com/youlai/system/common/constant/SecurityConstants.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.youlai.system.common.constant; - -/** - * Security常量 - * - * @author haoxr - * @date 2022/10/22 - */ -public interface SecurityConstants { - - /** - * 授权角色的前缀 - *

- * 区分角色与权限标识 - */ - String ROLE_PREFIX = "ROLE_"; - -} diff --git a/src/main/java/com/youlai/system/common/constant/SystemConstants.java b/src/main/java/com/youlai/system/common/constant/SystemConstants.java index 3e3cef44..7cc2fcca 100644 --- a/src/main/java/com/youlai/system/common/constant/SystemConstants.java +++ b/src/main/java/com/youlai/system/common/constant/SystemConstants.java @@ -17,7 +17,7 @@ public interface SystemConstants { /** * 系统默认密码 */ - String DEFAULT_USER_PASSWORD = "123456"; + String DEFAULT_PASSWORD = "123456"; /** * 超级管理员角色编码 diff --git a/src/main/java/com/youlai/system/common/exception/GlobalExceptionHandler.java b/src/main/java/com/youlai/system/common/exception/GlobalExceptionHandler.java index ed412851..8dcf5f01 100644 --- a/src/main/java/com/youlai/system/common/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/youlai/system/common/exception/GlobalExceptionHandler.java @@ -22,7 +22,6 @@ import javax.servlet.ServletException; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.sql.SQLSyntaxErrorException; -import java.util.concurrent.CompletionException; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; diff --git a/src/main/java/com/youlai/system/common/result/ResultCode.java b/src/main/java/com/youlai/system/common/result/ResultCode.java index 48dd7ece..a90492ee 100644 --- a/src/main/java/com/youlai/system/common/result/ResultCode.java +++ b/src/main/java/com/youlai/system/common/result/ResultCode.java @@ -25,7 +25,7 @@ public enum ResultCode implements IResultCode, Serializable { USERNAME_OR_PASSWORD_ERROR("A0210", "用户名或密码错误"), PASSWORD_ENTER_EXCEED_LIMIT("A0211", "用户输入密码次数超限"), CLIENT_AUTHENTICATION_FAILED("A0212", "客户端认证失败"), - TOKEN_INVALID_OR_EXPIRED("A0230", "token无效或已过期"), + TOKEN_INVALID("A0230", "token无效或已过期"), TOKEN_ACCESS_FORBIDDEN("A0231", "token已被禁止访问"), AUTHORIZED_ERROR("A0300", "访问权限异常"), diff --git a/src/main/java/com/youlai/system/config/SecurityConfig.java b/src/main/java/com/youlai/system/config/SecurityConfig.java index bd8bbbd5..6b02dbdc 100644 --- a/src/main/java/com/youlai/system/config/SecurityConfig.java +++ b/src/main/java/com/youlai/system/config/SecurityConfig.java @@ -1,6 +1,6 @@ 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.MyAuthenticationEntryPoint; import com.youlai.system.security.jwt.JwtTokenManager; diff --git a/src/main/java/com/youlai/system/controller/SysDeptController.java b/src/main/java/com/youlai/system/controller/SysDeptController.java index b7d248c7..7e88115d 100644 --- a/src/main/java/com/youlai/system/controller/SysDeptController.java +++ b/src/main/java/com/youlai/system/controller/SysDeptController.java @@ -1,6 +1,6 @@ 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.pojo.form.DeptForm; import com.youlai.system.pojo.query.DeptQuery; diff --git a/src/main/java/com/youlai/system/controller/SysDictTypeController.java b/src/main/java/com/youlai/system/controller/SysDictTypeController.java index 8e3667c9..ded93bb2 100644 --- a/src/main/java/com/youlai/system/controller/SysDictTypeController.java +++ b/src/main/java/com/youlai/system/controller/SysDictTypeController.java @@ -1,7 +1,7 @@ package com.youlai.system.controller; 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.Result; import com.youlai.system.pojo.form.DictTypeForm; diff --git a/src/main/java/com/youlai/system/controller/SysMenuController.java b/src/main/java/com/youlai/system/controller/SysMenuController.java index 7113cf35..e5a80d48 100644 --- a/src/main/java/com/youlai/system/controller/SysMenuController.java +++ b/src/main/java/com/youlai/system/controller/SysMenuController.java @@ -1,6 +1,6 @@ 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.pojo.entity.SysMenu; import com.youlai.system.pojo.query.MenuQuery; diff --git a/src/main/java/com/youlai/system/controller/SysRoleController.java b/src/main/java/com/youlai/system/controller/SysRoleController.java index e34dd5c5..aa4364fa 100644 --- a/src/main/java/com/youlai/system/controller/SysRoleController.java +++ b/src/main/java/com/youlai/system/controller/SysRoleController.java @@ -1,12 +1,11 @@ package com.youlai.system.controller; 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.Result; import com.youlai.system.pojo.entity.SysRole; 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.vo.role.RolePageVO; import com.youlai.system.service.SysRoleService; diff --git a/src/main/java/com/youlai/system/controller/SysUserController.java b/src/main/java/com/youlai/system/controller/SysUserController.java index c0354c89..51e2c16c 100644 --- a/src/main/java/com/youlai/system/controller/SysUserController.java +++ b/src/main/java/com/youlai/system/controller/SysUserController.java @@ -63,7 +63,7 @@ public class SysUserController { @ApiOperation(value = "新增用户") @PostMapping - @PreAuthorize("hasAuthority('sys:user:add')") + @PreAuthorize("@pms.hasPermission('sys:user:add')") public Result saveUser( @RequestBody @Valid UserForm userForm ) { @@ -73,7 +73,7 @@ public class SysUserController { @ApiOperation(value = "修改用户") @PutMapping(value = "/{userId}") - @PreAuthorize("hasAuthority('sys:user:edit')") + @PreAuthorize("@pms.hasPermission('sys:user:edit')") public Result updateUser( @ApiParam("用户ID") @PathVariable Long userId, @RequestBody @Validated UserForm userForm) { @@ -83,7 +83,7 @@ public class SysUserController { @ApiOperation(value = "删除用户") @DeleteMapping("/{ids}") - @PreAuthorize("hasAuthority('sys:user:delete')") + @PreAuthorize("@pms.hasPermission('sys:user:delete')") public Result deleteUsers( @ApiParam("用户ID,多个以英文逗号(,)分割") @PathVariable String ids ) { @@ -152,6 +152,7 @@ public class SysUserController { response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); List exportUserList = userService.listExportUsers(queryParams); - EasyExcel.write(response.getOutputStream(), UserExportVO.class).sheet("用户列表").doWrite(exportUserList); + EasyExcel.write(response.getOutputStream(), UserExportVO.class).sheet("用户列表") + .doWrite(exportUserList); } } diff --git a/src/main/java/com/youlai/system/converter/MenuConverter.java b/src/main/java/com/youlai/system/converter/MenuConverter.java index 485027f2..f7f0ac6a 100644 --- a/src/main/java/com/youlai/system/converter/MenuConverter.java +++ b/src/main/java/com/youlai/system/converter/MenuConverter.java @@ -15,5 +15,4 @@ public interface MenuConverter { MenuVO entity2VO(SysMenu entity); - } \ No newline at end of file diff --git a/src/main/java/com/youlai/system/converter/RoleConverter.java b/src/main/java/com/youlai/system/converter/RoleConverter.java index 56c0b8c8..5d11f3ed 100644 --- a/src/main/java/com/youlai/system/converter/RoleConverter.java +++ b/src/main/java/com/youlai/system/converter/RoleConverter.java @@ -1,7 +1,7 @@ package com.youlai.system.converter; 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.form.RoleForm; import com.youlai.system.pojo.vo.role.RolePageVO; diff --git a/src/main/java/com/youlai/system/converter/UserConverter.java b/src/main/java/com/youlai/system/converter/UserConverter.java index e11be797..9f610acf 100644 --- a/src/main/java/com/youlai/system/converter/UserConverter.java +++ b/src/main/java/com/youlai/system/converter/UserConverter.java @@ -22,7 +22,7 @@ import org.mapstruct.Mappings; public interface UserConverter { @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); diff --git a/src/main/java/com/youlai/system/common/enums/GenderEnum.java b/src/main/java/com/youlai/system/enums/GenderEnum.java similarity index 91% rename from src/main/java/com/youlai/system/common/enums/GenderEnum.java rename to src/main/java/com/youlai/system/enums/GenderEnum.java index 0b294975..d8e5ed04 100644 --- a/src/main/java/com/youlai/system/common/enums/GenderEnum.java +++ b/src/main/java/com/youlai/system/enums/GenderEnum.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.enums; +package com.youlai.system.enums; import com.youlai.system.common.base.IBaseEnum; import lombok.Getter; diff --git a/src/main/java/com/youlai/system/common/enums/MenuTypeEnum.java b/src/main/java/com/youlai/system/enums/MenuTypeEnum.java similarity index 94% rename from src/main/java/com/youlai/system/common/enums/MenuTypeEnum.java rename to src/main/java/com/youlai/system/enums/MenuTypeEnum.java index 7767ffa0..05fa6b0e 100644 --- a/src/main/java/com/youlai/system/common/enums/MenuTypeEnum.java +++ b/src/main/java/com/youlai/system/enums/MenuTypeEnum.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.enums; +package com.youlai.system.enums; import com.baomidou.mybatisplus.annotation.EnumValue; import com.youlai.system.common.base.IBaseEnum; diff --git a/src/main/java/com/youlai/system/common/enums/StatusEnum.java b/src/main/java/com/youlai/system/enums/StatusEnum.java similarity index 91% rename from src/main/java/com/youlai/system/common/enums/StatusEnum.java rename to src/main/java/com/youlai/system/enums/StatusEnum.java index 6caa2610..d333bbab 100644 --- a/src/main/java/com/youlai/system/common/enums/StatusEnum.java +++ b/src/main/java/com/youlai/system/enums/StatusEnum.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.enums; +package com.youlai.system.enums; import com.youlai.system.common.base.IBaseEnum; import lombok.Getter; diff --git a/src/main/java/com/youlai/system/mapper/SysRoleMapper.java b/src/main/java/com/youlai/system/mapper/SysRoleMapper.java index e7230f59..bb107419 100644 --- a/src/main/java/com/youlai/system/mapper/SysRoleMapper.java +++ b/src/main/java/com/youlai/system/mapper/SysRoleMapper.java @@ -4,8 +4,17 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.youlai.system.pojo.entity.SysRole; import org.apache.ibatis.annotations.Mapper; +import java.util.Set; + @Mapper public interface SysRoleMapper extends BaseMapper { + /** + * 获取最大范围的数据权限 + * + * @param roles + * @return + */ + Integer getMaximumDataScope(Set roles); } diff --git a/src/main/java/com/youlai/system/common/model/Option.java b/src/main/java/com/youlai/system/pojo/Option.java similarity index 95% rename from src/main/java/com/youlai/system/common/model/Option.java rename to src/main/java/com/youlai/system/pojo/Option.java index 5571356a..bd70686d 100644 --- a/src/main/java/com/youlai/system/common/model/Option.java +++ b/src/main/java/com/youlai/system/pojo/Option.java @@ -1,4 +1,4 @@ -package com.youlai.system.common.model; +package com.youlai.system.pojo; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModel; diff --git a/src/main/java/com/youlai/system/pojo/bo/RouteBO.java b/src/main/java/com/youlai/system/pojo/bo/RouteBO.java index 2af90dc2..725e4b1a 100644 --- a/src/main/java/com/youlai/system/pojo/bo/RouteBO.java +++ b/src/main/java/com/youlai/system/pojo/bo/RouteBO.java @@ -2,7 +2,7 @@ package com.youlai.system.pojo.bo; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; -import com.youlai.system.common.enums.MenuTypeEnum; +import com.youlai.system.enums.MenuTypeEnum; import lombok.Data; import java.util.List; diff --git a/src/main/java/com/youlai/system/pojo/entity/SysMenu.java b/src/main/java/com/youlai/system/pojo/entity/SysMenu.java index 4d03482c..0b63e9c3 100644 --- a/src/main/java/com/youlai/system/pojo/entity/SysMenu.java +++ b/src/main/java/com/youlai/system/pojo/entity/SysMenu.java @@ -1,14 +1,11 @@ package com.youlai.system.pojo.entity; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; 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.enums.MenuTypeEnum; +import com.youlai.system.enums.MenuTypeEnum; import lombok.Data; /** diff --git a/src/main/java/com/youlai/system/pojo/entity/SysRole.java b/src/main/java/com/youlai/system/pojo/entity/SysRole.java index 49168e7a..6fce20fa 100644 --- a/src/main/java/com/youlai/system/pojo/entity/SysRole.java +++ b/src/main/java/com/youlai/system/pojo/entity/SysRole.java @@ -58,4 +58,9 @@ public class SysRole implements Serializable { @TableField(exist = false) private static final long serialVersionUID = 1L; + + /** + * 数据权限 + */ + private Integer dataScope; } \ No newline at end of file diff --git a/src/main/java/com/youlai/system/pojo/vo/menu/MenuVO.java b/src/main/java/com/youlai/system/pojo/vo/menu/MenuVO.java index b4f35cb2..7738f011 100644 --- a/src/main/java/com/youlai/system/pojo/vo/menu/MenuVO.java +++ b/src/main/java/com/youlai/system/pojo/vo/menu/MenuVO.java @@ -1,7 +1,7 @@ package com.youlai.system.pojo.vo.menu; 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.ApiModelProperty; import lombok.Data; diff --git a/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java b/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java index c2f6585f..96ff8f7a 100644 --- a/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java +++ b/src/main/java/com/youlai/system/security/exception/MyAuthenticationEntryPoint.java @@ -21,6 +21,6 @@ import java.io.IOException; public class MyAuthenticationEntryPoint implements AuthenticationEntryPoint { @Override 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); } } diff --git a/src/main/java/com/youlai/system/security/userdetails/SysUserDetails.java b/src/main/java/com/youlai/system/security/userdetails/SysUserDetails.java index 798553b2..96060cac 100644 --- a/src/main/java/com/youlai/system/security/userdetails/SysUserDetails.java +++ b/src/main/java/com/youlai/system/security/userdetails/SysUserDetails.java @@ -15,6 +15,7 @@ import java.util.stream.Collectors; /** * Spring Security + * * @author haoxr */ @Data @@ -30,10 +31,12 @@ public class SysUserDetails implements UserDetails { private Collection authorities; - private String authorityStr; - private Set perms; + private Long deptId; + + private Integer dataScope; + public SysUserDetails() { } @@ -53,7 +56,9 @@ public class SysUserDetails implements UserDetails { this.username = user.getUsername(); this.password = user.getPassword(); 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() { diff --git a/src/main/java/com/youlai/system/security/userdetails/SysUserDetailsServiceImpl.java b/src/main/java/com/youlai/system/security/userdetails/SysUserDetailsService.java similarity index 90% rename from src/main/java/com/youlai/system/security/userdetails/SysUserDetailsServiceImpl.java rename to src/main/java/com/youlai/system/security/userdetails/SysUserDetailsService.java index 33c823b7..2861533e 100644 --- a/src/main/java/com/youlai/system/security/userdetails/SysUserDetailsServiceImpl.java +++ b/src/main/java/com/youlai/system/security/userdetails/SysUserDetailsService.java @@ -9,11 +9,13 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; /** + * 用户认证信息实现类 + * * @author haoxr */ @Service @RequiredArgsConstructor -public class SysUserDetailsServiceImpl implements UserDetailsService { +public class SysUserDetailsService implements UserDetailsService { private final SysUserService sysUserService; diff --git a/src/main/java/com/youlai/system/service/SysDeptService.java b/src/main/java/com/youlai/system/service/SysDeptService.java index f5fa71c0..4468b9e1 100644 --- a/src/main/java/com/youlai/system/service/SysDeptService.java +++ b/src/main/java/com/youlai/system/service/SysDeptService.java @@ -1,7 +1,7 @@ package com.youlai.system.service; 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.form.DeptForm; import com.youlai.system.pojo.query.DeptQuery; diff --git a/src/main/java/com/youlai/system/service/SysDictTypeService.java b/src/main/java/com/youlai/system/service/SysDictTypeService.java index b277156d..7695e021 100644 --- a/src/main/java/com/youlai/system/service/SysDictTypeService.java +++ b/src/main/java/com/youlai/system/service/SysDictTypeService.java @@ -2,7 +2,7 @@ package com.youlai.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.form.DictTypeForm; import com.youlai.system.pojo.query.DictTypePageQuery; diff --git a/src/main/java/com/youlai/system/service/SysMenuService.java b/src/main/java/com/youlai/system/service/SysMenuService.java index e2ce3463..a0d25025 100644 --- a/src/main/java/com/youlai/system/service/SysMenuService.java +++ b/src/main/java/com/youlai/system/service/SysMenuService.java @@ -1,7 +1,7 @@ package com.youlai.system.service; 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.query.MenuQuery; import com.youlai.system.pojo.vo.menu.MenuVO; diff --git a/src/main/java/com/youlai/system/service/SysRoleService.java b/src/main/java/com/youlai/system/service/SysRoleService.java index a5c43f85..aaeb7bb0 100644 --- a/src/main/java/com/youlai/system/service/SysRoleService.java +++ b/src/main/java/com/youlai/system/service/SysRoleService.java @@ -3,14 +3,14 @@ package com.youlai.system.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.form.RoleForm; -import com.youlai.system.pojo.form.RoleResourceForm; import com.youlai.system.pojo.query.RolePageQuery; import com.youlai.system.pojo.vo.role.RolePageVO; import java.util.List; +import java.util.Set; /** * 角色业务接口层 @@ -78,4 +78,12 @@ public interface SysRoleService extends IService { * @return */ boolean updateRoleMenus(Long roleId, List menuIds); + + /** + * 获取最大范围的数据权限 + * + * @param roles + * @return + */ + Integer getMaximumDataScope(Set roles); } diff --git a/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java index b949781a..4b69ae33 100644 --- a/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysDeptServiceImpl.java @@ -7,8 +7,8 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.youlai.system.common.constant.SystemConstants; -import com.youlai.system.common.enums.StatusEnum; -import com.youlai.system.common.model.Option; +import com.youlai.system.enums.StatusEnum; +import com.youlai.system.pojo.Option; import com.youlai.system.converter.DeptConverter; import com.youlai.system.mapper.SysDeptMapper; import com.youlai.system.pojo.entity.SysDept; diff --git a/src/main/java/com/youlai/system/service/impl/SysDictTypeServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysDictTypeServiceImpl.java index e4453015..faf61fb9 100644 --- a/src/main/java/com/youlai/system/service/impl/SysDictTypeServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysDictTypeServiceImpl.java @@ -7,7 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 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.mapper.SysDictTypeMapper; import com.youlai.system.pojo.entity.SysDictItem; diff --git a/src/main/java/com/youlai/system/service/impl/SysMenuServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysMenuServiceImpl.java index 8887b762..cf49800e 100644 --- a/src/main/java/com/youlai/system/service/impl/SysMenuServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysMenuServiceImpl.java @@ -7,9 +7,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.youlai.system.common.constant.SystemConstants; -import com.youlai.system.common.enums.MenuTypeEnum; -import com.youlai.system.common.enums.StatusEnum; -import com.youlai.system.common.model.Option; +import com.youlai.system.enums.MenuTypeEnum; +import com.youlai.system.enums.StatusEnum; +import com.youlai.system.pojo.Option; import com.youlai.system.converter.MenuConverter; import com.youlai.system.mapper.SysMenuMapper; import com.youlai.system.pojo.entity.SysMenu; diff --git a/src/main/java/com/youlai/system/service/impl/SysRoleServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysRoleServiceImpl.java index 77dea8a8..b9435e59 100644 --- a/src/main/java/com/youlai/system/service/impl/SysRoleServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysRoleServiceImpl.java @@ -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.service.impl.ServiceImpl; 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.mapper.SysRoleMapper; import com.youlai.system.pojo.entity.SysRole; import com.youlai.system.pojo.entity.SysRoleMenu; import com.youlai.system.pojo.entity.SysUserRole; 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.vo.role.RolePageVO; import com.youlai.system.service.SysRoleMenuService; @@ -27,10 +26,7 @@ import org.springframework.cache.annotation.CacheEvict; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -193,4 +189,16 @@ public class SysRoleServiceImpl extends ServiceImpl impl return true; } + /** + * 获取最大范围的数据权限 + * + * @param roles + * @return + */ + @Override + public Integer getMaximumDataScope(Set roles) { + Integer dataScope = this.baseMapper.getMaximumDataScope(roles); + return dataScope; + } + } diff --git a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java index 13b236ea..abfc15f4 100644 --- a/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java +++ b/src/main/java/com/youlai/system/service/impl/SysUserServiceImpl.java @@ -15,8 +15,8 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.Lists; import com.youlai.system.common.base.IBaseEnum; import com.youlai.system.common.constant.SystemConstants; -import com.youlai.system.common.enums.GenderEnum; import com.youlai.system.converter.UserConverter; +import com.youlai.system.enums.GenderEnum; import com.youlai.system.listener.UserImportListener; import com.youlai.system.mapper.SysUserMapper; 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.UserVO; import com.youlai.system.service.SysMenuService; +import com.youlai.system.service.SysRoleService; import com.youlai.system.service.SysUserRoleService; import com.youlai.system.service.SysUserService; import com.youlai.system.util.SecurityUtils; import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import javax.annotation.Resource; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -62,11 +63,14 @@ public class SysUserServiceImpl extends ServiceImpl impl private final SysUserRoleService userRoleService; private final UserImportListener userImportListener; - @Resource - private UserConverter userConverter; + private final UserConverter userConverter; private final SysMenuService menuService; + private final SysRoleService roleService; + + private final RedisTemplate redisTemplate; + /** * 获取用户分页列表 * @@ -122,7 +126,7 @@ public class SysUserServiceImpl extends ServiceImpl impl SysUser entity = userConverter.form2Entity(userForm); // 设置默认加密密码 - String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_USER_PASSWORD); + String defaultEncryptPwd = passwordEncoder.encode(SystemConstants.DEFAULT_PASSWORD); entity.setPassword(defaultEncryptPwd); // 新增用户 @@ -211,12 +215,16 @@ public class SysUserServiceImpl extends ServiceImpl impl @Override public UserAuthInfo getUserAuthInfo(String username) { UserAuthInfo userAuthInfo = this.baseMapper.getUserAuthInfo(username); - if(userAuthInfo!=null){ + if (userAuthInfo != null) { Set roles = userAuthInfo.getRoles(); - if(CollectionUtil.isNotEmpty(roles)){ - Set perms= menuService.listRolePerms(roles); + if (CollectionUtil.isNotEmpty(roles)) { + Set perms = menuService.listRolePerms(roles); userAuthInfo.setPerms(perms); } + + // 获取最大范围的数据权限 + Integer dataScope = roleService.getMaximumDataScope(roles); + userAuthInfo.setDataScope(dataScope); } return userAuthInfo; } @@ -281,7 +289,7 @@ public class SysUserServiceImpl extends ServiceImpl impl user.setEmail(userItem.getEmail()); 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); user.setGender(gender); @@ -349,7 +357,7 @@ public class SysUserServiceImpl extends ServiceImpl impl userLoginVO.setRoles(roles); // 用户权限集合 - Set perms = SecurityUtils.getPerms(); + Set perms = (Set)redisTemplate.opsForValue().get("USER_PERMS:" + user.getId()); userLoginVO.setPerms(perms); return userLoginVO; diff --git a/src/main/java/com/youlai/system/util/ResponseUtils.java b/src/main/java/com/youlai/system/util/ResponseUtils.java index 2dfe4aa6..e2ac13df 100644 --- a/src/main/java/com/youlai/system/util/ResponseUtils.java +++ b/src/main/java/com/youlai/system/util/ResponseUtils.java @@ -27,7 +27,7 @@ public class ResponseUtils { public static void writeErrMsg(HttpServletResponse response, ResultCode resultCode) throws IOException { switch (resultCode) { case ACCESS_UNAUTHORIZED: - case TOKEN_INVALID_OR_EXPIRED: + case TOKEN_INVALID: response.setStatus(HttpStatus.UNAUTHORIZED.value()); break; case TOKEN_ACCESS_FORBIDDEN: diff --git a/src/main/java/com/youlai/system/util/SecurityUtils.java b/src/main/java/com/youlai/system/util/SecurityUtils.java index 013afa2e..d2eb3a9b 100644 --- a/src/main/java/com/youlai/system/util/SecurityUtils.java +++ b/src/main/java/com/youlai/system/util/SecurityUtils.java @@ -1,15 +1,14 @@ package com.youlai.system.util; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import com.youlai.system.common.constant.SystemConstants; 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.GrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.PatternMatchUtils; -import org.springframework.util.StringUtils; import java.util.Collection; import java.util.Collections; @@ -34,6 +33,37 @@ public class SecurityUtils { 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,16 +71,16 @@ public class SecurityUtils { */ public static Set getRoles() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - Collection authorities = authentication.getAuthorities(); - Set roles = null; - if (CollectionUtil.isNotEmpty(authorities)) { - roles = authorities.stream().filter(item -> item.getAuthority().startsWith("ROLE_")) - .map(item -> StrUtil.removePrefix(item.getAuthority(), "ROLE_")) - .collect(Collectors.toSet()); - } else { - roles = Collections.EMPTY_SET; + if (authentication != null) { + Collection authorities = authentication.getAuthorities(); + if (CollectionUtil.isNotEmpty(authorities)) { + Set roles = authorities.stream().filter(item -> item.getAuthority().startsWith("ROLE_")) + .map(item -> StrUtil.removePrefix(item.getAuthority(), "ROLE_")) + .collect(Collectors.toSet()); + return roles; + } } - return roles; + return Collections.EMPTY_SET; } /** @@ -60,16 +90,16 @@ public class SecurityUtils { */ public static Set getPerms() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); - Collection authorities = authentication.getAuthorities(); - Set perms = null; - if (CollectionUtil.isNotEmpty(authorities)) { - perms = authorities.stream().filter(item -> !item.getAuthority().startsWith("ROLE_")) - .map(item -> item.getAuthority()) - .collect(Collectors.toSet()); - } else { - perms = Collections.EMPTY_SET; + if (authentication != null) { + Collection authorities = authentication.getAuthorities(); + if (CollectionUtil.isNotEmpty(authorities)) { + Set perms = authorities.stream().filter(item -> !item.getAuthority().startsWith("ROLE_")) + .map(item -> item.getAuthority()) + .collect(Collectors.toSet()); + return perms; + } } - return perms; + return Collections.EMPTY_SET; } /** diff --git a/src/main/resources/mapper/SysMenuMapper.xml b/src/main/resources/mapper/SysMenuMapper.xml index 8ed68d9e..aaeb3bf3 100644 --- a/src/main/resources/mapper/SysMenuMapper.xml +++ b/src/main/resources/mapper/SysMenuMapper.xml @@ -40,7 +40,7 @@ LEFT JOIN sys_role_menu t2 ON t1.id = t2.menu_id LEFT JOIN sys_role t3 ON t2.role_id = t3.id 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 @@ -53,7 +53,7 @@ INNER JOIN sys_role_menu t2 INNER JOIN sys_role t3 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 diff --git a/src/main/resources/mapper/SysRoleMapper.xml b/src/main/resources/mapper/SysRoleMapper.xml index ee5ba383..7fd085c8 100644 --- a/src/main/resources/mapper/SysRoleMapper.xml +++ b/src/main/resources/mapper/SysRoleMapper.xml @@ -4,20 +4,24 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - id,name,code, - sort,status,deleted, - create_time,update_time - + +