diff --git a/das/src/main/java/com/das/common/config/SessionUtil.java b/das/src/main/java/com/das/common/config/SessionUtil.java new file mode 100644 index 00000000..70fdcc02 --- /dev/null +++ b/das/src/main/java/com/das/common/config/SessionUtil.java @@ -0,0 +1,8 @@ +package com.das.common.config; + +/** + * Session 变量定义 + */ +public class SessionUtil { + public static final String SESSION_USER_KEY = "current_user"; +} diff --git a/das/src/main/java/com/das/common/config/StpInterfaceImpl.java b/das/src/main/java/com/das/common/config/StpInterfaceImpl.java new file mode 100644 index 00000000..a1c653bd --- /dev/null +++ b/das/src/main/java/com/das/common/config/StpInterfaceImpl.java @@ -0,0 +1,43 @@ +package com.das.common.config; + +import cn.dev33.satoken.stp.StpInterface; +import cn.dev33.satoken.stp.StpUtil; +import org.springframework.stereotype.Component; +import com.das.modules.auth.domain.vo.SysUserVo; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * 自定义权限验证接口扩展 + */ +@Component // 保证此类被springboot扫描,完成sa-token的自定义权限验证扩展 +public class StpInterfaceImpl implements StpInterface { + @Override + public List getPermissionList(Object loginId, String s) { + SysUserVo currentUser = (SysUserVo) StpUtil.getTokenSession().get(SessionUtil.SESSION_USER_KEY); + if(currentUser==null){ + return Collections.emptyList(); + }else{ + List list = new ArrayList<>(); + currentUser.getAuthorities().forEach(item->{ + list.add(item.toString()); + }); + + return list; + } + } + + /** + * 权限判断这块 全部采用权限Permission 判断,不采用角色Role判断 + * @param loginId + * @param s + * @return + */ + @Override + public List getRoleList(Object loginId, String s) { + return Collections.emptyList(); + } +} diff --git a/das/src/main/java/com/das/common/config/redis/RedisConfig.java b/das/src/main/java/com/das/common/config/redis/RedisConfig.java index ad1cce5b..0d6b7abc 100644 --- a/das/src/main/java/com/das/common/config/redis/RedisConfig.java +++ b/das/src/main/java/com/das/common/config/redis/RedisConfig.java @@ -26,12 +26,6 @@ public class RedisConfig { // 使用Jackson2JsonRedisSerialize 替换默认序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); -// FastJson2RedisSerializer fastJsonRedisSerializer = new FastJson2RedisSerializer<>(Object.class); -// GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); - -// ObjectMapper objectMapper = new ObjectMapper(); -// objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); -// jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 设置key和value的序列化规则 redisTemplate.setKeySerializer(new StringRedisSerializer()); diff --git a/das/src/main/java/com/das/common/exceptions/OssException.java b/das/src/main/java/com/das/common/exceptions/OssException.java index b25126eb..b2cd76ea 100644 --- a/das/src/main/java/com/das/common/exceptions/OssException.java +++ b/das/src/main/java/com/das/common/exceptions/OssException.java @@ -4,12 +4,15 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import java.io.Serial; + /** * @author chenhaojie * @Description oss存储服务异常 */ public class OssException extends RuntimeException { + @Serial private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); diff --git a/das/src/main/java/com/das/common/exceptions/RateLimiterException.java b/das/src/main/java/com/das/common/exceptions/RateLimiterException.java index 34a979b8..8387ec4d 100644 --- a/das/src/main/java/com/das/common/exceptions/RateLimiterException.java +++ b/das/src/main/java/com/das/common/exceptions/RateLimiterException.java @@ -3,13 +3,18 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import lombok.Getter; + +import java.io.Serial; /** * @author chenhaojie * @Description 频率限制异常 */ +@Getter public class RateLimiterException extends RuntimeException { + @Serial private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); @@ -46,18 +51,10 @@ public class RateLimiterException extends RuntimeException { super(cause); } - public int getCode() { - return code; - } - public void setCode(int code) { this.code = code; } - public String getMsg() { - return msg; - } - public void setMsg(String msg) { this.msg = msg; } diff --git a/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java b/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java index c7fcc11b..ea3f350b 100644 --- a/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java +++ b/das/src/main/java/com/das/common/exceptions/RepeatSubmitException.java @@ -3,13 +3,18 @@ package com.das.common.exceptions; import com.das.common.result.IResultCode; import com.das.common.result.ResultCode; +import lombok.Getter; + +import java.io.Serial; /** * @author chenhaojie * @Description 频率限制异常 */ +@Getter public class RepeatSubmitException extends RuntimeException { + @Serial private static final long serialVersionUID = 1L; private int code = ResultCode.FAILURE.getCode(); @@ -46,18 +51,10 @@ public class RepeatSubmitException extends RuntimeException { super(cause); } - public int getCode() { - return code; - } - public void setCode(int code) { this.code = code; } - public String getMsg() { - return msg; - } - public void setMsg(String msg) { this.msg = msg; } diff --git a/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java b/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java index f86170e2..b8b54ea9 100644 --- a/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java +++ b/das/src/main/java/com/das/common/handler/GlobalExceptionHandler.java @@ -104,9 +104,6 @@ public class GlobalExceptionHandler { if (exception instanceof MethodArgumentNotValidException e){ bindingResult = e.getBindingResult(); if (bindingResult.hasErrors()) { -// String collect = bindingResult.getAllErrors().stream() -// .map(ObjectError::getDefaultMessage) -// .collect(Collectors.joining(";")); FieldError fieldError = bindingResult.getFieldError(); if (fieldError != null) { return R.fail(fieldError.getField()+ ":" + fieldError.getDefaultMessage()); @@ -120,9 +117,6 @@ public class GlobalExceptionHandler { }else if (exception instanceof BindException e){ bindingResult = e.getBindingResult(); if (bindingResult.hasErrors()) { -// String collect = bindingResult.getAllErrors().stream() -// .map(ObjectError::getDefaultMessage) -// .collect(Collectors.joining(";")); FieldError fieldError = bindingResult.getFieldError(); if (fieldError != null) { return R.fail(fieldError.getField()+ ":" + fieldError.getDefaultMessage()); @@ -151,21 +145,10 @@ public class GlobalExceptionHandler { return R.fail(message); } -// /** -// * 捕获授权异常 403 -// **/ -// @ExceptionHandler(value = AccessDeniedException.class) -// @ResponseStatus(HttpStatus.FORBIDDEN) -// public R handlerAccessDeniedException(AccessDeniedException exception) { -// String message = exception.getMessage(); -// log.error("全局捕获授权错误信息,{}", message ,exception); -// return R.fail(HttpStatus.FORBIDDEN.value(),"权限不足"); -// } - /** * 捕获 404 异常 - * @param exception - * @return + * @param exception 异常 + * @return R */ @ExceptionHandler({NoHandlerFoundException.class, HttpRequestMethodNotSupportedException.class}) @ResponseStatus(HttpStatus.NOT_FOUND) diff --git a/das/src/main/java/com/das/modules/auth/controller/SysMenusController.java b/das/src/main/java/com/das/modules/auth/controller/SysMenusController.java index cbe2ed49..48764bab 100644 --- a/das/src/main/java/com/das/modules/auth/controller/SysMenusController.java +++ b/das/src/main/java/com/das/modules/auth/controller/SysMenusController.java @@ -1,15 +1,21 @@ package com.das.modules.auth.controller; +import cn.dev33.satoken.annotation.SaCheckPermission; +import cn.dev33.satoken.stp.StpUtil; +import com.das.common.config.SessionUtil; +import com.das.common.config.SysAuthorityIds; import com.das.common.result.R; import com.das.common.utils.PageDataInfo; import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.DeleteDto; import com.das.modules.auth.domain.dto.SysMenuDto; import com.das.modules.auth.domain.dto.SysMenuQueryDto; +import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.auth.entity.SysMenu; import com.das.modules.auth.service.SysMenuService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -32,6 +38,12 @@ public class SysMenusController { */ @PostMapping("/add") public R createMenu(@RequestBody SysMenuDto sysMenuDto) { + + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } return R.success(sysMenuService.createMenu(sysMenuDto)); } @@ -41,6 +53,12 @@ public class SysMenusController { */ @PostMapping("/update") public R updateMenu(@RequestBody SysMenuDto sysMenuDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + sysMenuService.updateMenu(sysMenuDto); return R.success(); } @@ -51,6 +69,12 @@ public class SysMenusController { */ @PostMapping("/delete") public R deleteMenu(@RequestBody DeleteDto deleteDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + sysMenuService.deleteMenu(deleteDto); return R.success(); } diff --git a/das/src/main/java/com/das/modules/auth/controller/SysOrgController.java b/das/src/main/java/com/das/modules/auth/controller/SysOrgController.java index e3fafee0..ad771f90 100644 --- a/das/src/main/java/com/das/modules/auth/controller/SysOrgController.java +++ b/das/src/main/java/com/das/modules/auth/controller/SysOrgController.java @@ -1,5 +1,7 @@ package com.das.modules.auth.controller; +import cn.dev33.satoken.stp.StpUtil; +import com.das.common.config.SysAuthorityIds; import com.das.common.result.R; import com.das.common.utils.PageDataInfo; import com.das.common.utils.PageQuery; @@ -32,6 +34,12 @@ public class SysOrgController { */ @PostMapping("/add") public R createOrg(@RequestBody SysOrgDto sysOrgDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + return R.success(sysOrgService.createOrg(sysOrgDto)); } @@ -41,6 +49,12 @@ public class SysOrgController { */ @PostMapping("/update") public R updateOrg(@RequestBody SysOrgDto sysOrgDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + sysOrgService.updateOrg(sysOrgDto); return R.success(); } @@ -51,6 +65,12 @@ public class SysOrgController { */ @PostMapping("/delete") public R deleteOrg(@RequestBody DeleteDto deleteDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + sysOrgService.deleteOrg(deleteDto); return R.success(); } diff --git a/das/src/main/java/com/das/modules/auth/controller/SysRoleController.java b/das/src/main/java/com/das/modules/auth/controller/SysRoleController.java index 5c17502d..ac1351a7 100644 --- a/das/src/main/java/com/das/modules/auth/controller/SysRoleController.java +++ b/das/src/main/java/com/das/modules/auth/controller/SysRoleController.java @@ -1,9 +1,12 @@ package com.das.modules.auth.controller; +import cn.dev33.satoken.stp.StpUtil; +import com.das.common.config.SysAuthorityIds; import com.das.common.result.R; import com.das.common.utils.PageDataInfo; import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.*; +import com.das.modules.auth.domain.vo.SysRoleVo; import com.das.modules.auth.entity.SysRole; import com.das.modules.auth.service.SysRoleService; import lombok.extern.slf4j.Slf4j; @@ -31,6 +34,12 @@ public class SysRoleController { */ @PostMapping("/add") public R createRole(@RequestBody SysRoleDto sysRoleDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + return R.success(sysRoleService.createRole(sysRoleDto)); } @@ -40,6 +49,12 @@ public class SysRoleController { */ @PostMapping("/update") public R updateRole(@RequestBody SysRoleDto sysRoleDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + return R.success(sysRoleService.updateRole(sysRoleDto)); } @@ -49,12 +64,18 @@ public class SysRoleController { */ @PostMapping("/delete") public R deleteRole(@RequestBody DeleteDto deleteDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + sysRoleService.deleteRole(deleteDto); return R.success(); } @PostMapping("/query") - public PageDataInfo queryRoleList(@RequestBody SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery) { + public PageDataInfo queryRoleList(@RequestBody SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery) { return sysRoleService.queryRoleList(sysRoleQueryDto, pageQuery); } diff --git a/das/src/main/java/com/das/modules/auth/controller/SysUserController.java b/das/src/main/java/com/das/modules/auth/controller/SysUserController.java index 0d4f25e3..c99d1059 100644 --- a/das/src/main/java/com/das/modules/auth/controller/SysUserController.java +++ b/das/src/main/java/com/das/modules/auth/controller/SysUserController.java @@ -1,11 +1,14 @@ package com.das.modules.auth.controller; +import cn.dev33.satoken.stp.StpUtil; +import com.das.common.config.SysAuthorityIds; import com.das.common.result.R; import com.das.common.utils.PageDataInfo; import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.DeleteDto; import com.das.modules.auth.domain.dto.SysUserDto; import com.das.modules.auth.domain.dto.SysUserQueryDto; +import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.auth.entity.SysUser; import com.das.modules.auth.service.SysUserService; import lombok.extern.slf4j.Slf4j; @@ -32,6 +35,12 @@ public class SysUserController { */ @PostMapping("/add") public R createUser(@RequestBody SysUserDto sysUserDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + return R.success(sysUserService.createUser(sysUserDto)); } @@ -41,6 +50,12 @@ public class SysUserController { */ @PostMapping("/update") public R updateUser(@RequestBody SysUserDto sysUserDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + sysUserService.updateUser(sysUserDto); return R.success(); } @@ -51,12 +66,18 @@ public class SysUserController { */ @PostMapping("/delete") public R deleteUser(@RequestBody DeleteDto deleteDto) { + //判断是否有权限 +// boolean hasPermission = StpUtil.hasPermission(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN.toString()); +// if(!hasPermission){ +// return R.fail("没有系统管理权限"); +// } + sysUserService.deleteUser(deleteDto); return R.success(); } @PostMapping("/query") - public PageDataInfo queryUserList(@RequestBody SysUserQueryDto sysUserQueryDto, PageQuery pageQuery) { + public PageDataInfo queryUserList(@RequestBody SysUserQueryDto sysUserQueryDto, PageQuery pageQuery) { return sysUserService.queryUserList(sysUserQueryDto, pageQuery); } } diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java index 41d15c34..90d320cb 100644 --- a/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysMenuQueryDto.java @@ -8,6 +8,9 @@ import java.io.Serializable; public class SysMenuQueryDto implements Serializable { /** 菜单ID */ private Long id ; + + /** 菜单名称 */ + private String menuName ; /** 上级菜单ID */ private Long parentMenuId ; diff --git a/das/src/main/java/com/das/modules/auth/domain/dto/SysUserDto.java b/das/src/main/java/com/das/modules/auth/domain/dto/SysUserDto.java index 20608cd0..35026906 100644 --- a/das/src/main/java/com/das/modules/auth/domain/dto/SysUserDto.java +++ b/das/src/main/java/com/das/modules/auth/domain/dto/SysUserDto.java @@ -1,36 +1,55 @@ package com.das.modules.auth.domain.dto; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; +import java.io.Serial; import java.io.Serializable; import java.util.Date; +import java.util.List; @Data public class SysUserDto implements Serializable { - /** 角色ID */ - private Long id ; - /** 账号 */ - private String account ; - /** 密码 */ - private String password ; - /** 职员名称 */ - private String userName ; - /** 职员邮箱 */ - private String email ; - /** 手机号 */ - private String phone ; - /** 所属机构id */ - private Long orgId ; - /** 最后登录时间 */ - private Date lastLogin ; - /** 乐观锁 */ - private Integer revision ; - /** 创建人 */ - private String createdBy ; - /** 创建时间 */ - private Date createdTime ; - /** 更新人 */ - private String updatedBy ; - /** 更新时间 */ - private Date updatedTime ; - } + /** + * 角色ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + /** + * 账号 + */ + private String account; + /** + * 密码 + */ + private String password; + /** + * 职员名称 + */ + private String userName; + /** + * 职员邮箱 + */ + private String email; + /** + * 手机号 + */ + private String phone; + /** + * 所属机构id + */ + private Long orgId; + /** + * 最后登录时间 + */ + private Date lastLogin; + /** + * 乐观锁 + */ + private Integer revision; + /** + * 角色列表 + */ + private List roleList; +} diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysMenuVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysMenuVo.java index 40d4042a..acea838b 100644 --- a/das/src/main/java/com/das/modules/auth/domain/vo/SysMenuVo.java +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysMenuVo.java @@ -1,5 +1,7 @@ package com.das.modules.auth.domain.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serial; @@ -13,6 +15,7 @@ public class SysMenuVo implements Serializable { private static final long serialVersionUID = 1L; /** 菜单ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long id ; /** 菜单名称 */ private String menuName ; diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysOrgVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysOrgVo.java new file mode 100644 index 00000000..0a845edb --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysOrgVo.java @@ -0,0 +1,39 @@ +package com.das.modules.auth.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class SysOrgVo implements Serializable { + /** 机构id */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id ; + /** 机构名称 */ + private String name ; + /** 机构编码 */ + private String mrid ; + /** 省份 */ + private String province ; + /** 城市 */ + private String city ; + /** 区县 */ + private String county ; + /** 具体地址 */ + private String address ; + /** 联系电话 */ + private String contactPhone ; + /** 备注 */ + private String remarks ; + /** 机构简称 */ + private String aliasName; + /** 上级组织机构id */ + private Long parentOrgId ; + + private String parentOrgName ; + /** 乐观锁 */ + private Integer revision ; + } diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleAuthVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleAuthVo.java index 179a167e..8aa28742 100644 --- a/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleAuthVo.java +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleAuthVo.java @@ -1,5 +1,7 @@ package com.das.modules.auth.domain.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serial; @@ -17,6 +19,7 @@ public class SysRoleAuthVo implements Serializable { /** * 账号ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleVo.java new file mode 100644 index 00000000..282c5ad1 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysRoleVo.java @@ -0,0 +1,46 @@ +package com.das.modules.auth.domain.vo; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.Version; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * 角色前端回显 + * + * @author guchengwei + */ +@Data +public class SysRoleVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 账号ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 角色编码 + */ + private String roleCode; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 乐观锁 + */ + private Integer revision; + + private List list; + + +} diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysUserRoleVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysUserRoleVo.java new file mode 100644 index 00000000..a83c43de --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysUserRoleVo.java @@ -0,0 +1,41 @@ +package com.das.modules.auth.domain.vo; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 账号信息 + * + * @author guchengwei + */ +@Data +public class SysUserRoleVo implements Serializable { + @Serial + private static final long serialVersionUID = 1L; + /** + * 账号ID + */ + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 角色编码 + */ + private String roleCode; + + /** + * 角色名称 + */ + private String roleName; + + /** + * 版本号 + */ + private Integer revision; + + +} diff --git a/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java b/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java index 3feb73c6..9e45b2bf 100644 --- a/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java +++ b/das/src/main/java/com/das/modules/auth/domain/vo/SysUserVo.java @@ -1,9 +1,13 @@ package com.das.modules.auth.domain.vo; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; /** * 账号信息 @@ -17,6 +21,7 @@ public class SysUserVo implements Serializable { /** * 账号ID */ + @JsonSerialize(using = ToStringSerializer.class) private Long id; /** @@ -29,6 +34,12 @@ public class SysUserVo implements Serializable { */ private String userName; + + /** + * 乐观锁 + */ + private Integer revision; + /** * 手机号 */ @@ -43,7 +54,16 @@ public class SysUserVo implements Serializable { /** * 所属机构 */ + @JsonSerialize(using = ToStringSerializer.class) private Long orgId; + /** + * 角色列表 + */ + private List roleList; + /** + *权限列表 + */ + private List authorities=new ArrayList<>(); } diff --git a/das/src/main/java/com/das/modules/auth/entity/SysUserRole.java b/das/src/main/java/com/das/modules/auth/entity/SysUserRole.java new file mode 100644 index 00000000..b5fa43ce --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/entity/SysUserRole.java @@ -0,0 +1,57 @@ +package com.das.modules.auth.entity; + + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.annotation.Version; +import com.das.common.constant.BaseEntity; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * (sys_r_role_authority)实体类 + * + * @author chenhaojie + * @since 2024-06-25 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@TableName("sys_r_user_role") +public class SysUserRole extends BaseEntity implements Serializable { + /** + * 主键 + */ + @TableId("id") + @JsonSerialize(using = ToStringSerializer.class) + private Long id; + + /** + * 用户id + */ + @TableField("user_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long userId; + + /** + * 角色id + */ + @TableField("role_id") + @JsonSerialize(using = ToStringSerializer.class) + private Long roleId; + + /** + * 乐观锁 + */ + @Version + @TableField("revision") + private Integer revision; +} diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java index 64ed4971..2ad03d8d 100644 --- a/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java +++ b/das/src/main/java/com/das/modules/auth/mapper/SysMenuMapper.java @@ -22,7 +22,5 @@ public interface SysMenuMapper extends BaseMapper { List queryAllMenuList(@Param("sysMenu") SysMenuQueryDto sysMenuQueryDto); - List queryAllMenuListByParentId(@Param("sysMenu") SysMenuQueryDto sysMenuQueryDto); - SysMenuVo createTree(); } diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysRoleMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysRoleMapper.java index db73319f..1855d196 100644 --- a/das/src/main/java/com/das/modules/auth/mapper/SysRoleMapper.java +++ b/das/src/main/java/com/das/modules/auth/mapper/SysRoleMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.modules.auth.domain.dto.SysRoleQueryDto; import com.das.modules.auth.domain.vo.SysRoleAuthVo; +import com.das.modules.auth.domain.vo.SysRoleVo; import com.das.modules.auth.entity.SysRole; import org.apache.ibatis.annotations.Param; @@ -25,11 +26,13 @@ public interface SysRoleMapper extends BaseMapper { * @return 0 - 不存在 1 - 存在 */ long existRoleByRoleCode(@Param("roleCode") String roleCode); - IPage queryRoleList(IPage page, @Param("sysRole") SysRoleQueryDto sysRoleQueryDto); + IPage queryRoleList(IPage page, @Param("sysRole") SysRoleQueryDto sysRoleQueryDto); List queryAuthorityById(@Param("id")Long id); SysRole selectByCode(@Param("roleCode") String roleCode); + long existRoleByRoleId(@Param("id")Long id); + long existRoleByName(@Param("name") String name); } diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java index 20aa8bfd..a4b8a5c0 100644 --- a/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java +++ b/das/src/main/java/com/das/modules/auth/mapper/SysUserMapper.java @@ -2,10 +2,13 @@ package com.das.modules.auth.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.modules.auth.domain.dto.SysUserQueryDto; +import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.auth.entity.SysUser; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; +import java.util.List; + /** *

* 用户信息 Mapper 接口 @@ -14,5 +17,21 @@ import org.apache.ibatis.annotations.Param; * @author chenhaojie */ public interface SysUserMapper extends BaseMapper { - IPage queryUserList(IPage page, @Param("sysUser") SysUserQueryDto sysUserQueryDto); + + /** + * 判断用户是否存在 + * + * @param account 用户账号 + * @return 0 - 不存在 1 - 存在 + */ + long existUserByAccount(@Param("account") String account); + IPage queryUserList(IPage page, @Param("sysUser") SysUserQueryDto sysUserQueryDto); + + long existUserByUserName(@Param("userName") String userName); + /** + * 根据用户id查询权限列表 + * @param userId 用户id + * @return 该用户拥有的权限id列表 + */ + List queryAuthoritiesByUserId(@Param("userId") Long userId); } diff --git a/das/src/main/java/com/das/modules/auth/mapper/SysUserRoleMapper.java b/das/src/main/java/com/das/modules/auth/mapper/SysUserRoleMapper.java new file mode 100644 index 00000000..c5876cb8 --- /dev/null +++ b/das/src/main/java/com/das/modules/auth/mapper/SysUserRoleMapper.java @@ -0,0 +1,18 @@ +package com.das.modules.auth.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.das.modules.auth.entity.SysRoleAuthority; +import com.das.modules.auth.entity.SysUserRole; + + +/** + *

+ * 用户信息 Mapper 接口 + *

+ * + * @author chenhaojie + */ +public interface SysUserRoleMapper extends BaseMapper { + + +} diff --git a/das/src/main/java/com/das/modules/auth/service/SysMenuService.java b/das/src/main/java/com/das/modules/auth/service/SysMenuService.java index 02ff193d..04a16099 100644 --- a/das/src/main/java/com/das/modules/auth/service/SysMenuService.java +++ b/das/src/main/java/com/das/modules/auth/service/SysMenuService.java @@ -15,9 +15,9 @@ public interface SysMenuService { SysMenu createMenu(SysMenuDto sysMenuDto); - int updateMenu(SysMenuDto sysMenuDto); + void updateMenu(SysMenuDto sysMenuDto); - int deleteMenu(DeleteDto deleteDto); + void deleteMenu(DeleteDto deleteDto); PageDataInfo queryMenuList(SysMenuQueryDto sysMenuQueryDto, PageQuery pageQuery); diff --git a/das/src/main/java/com/das/modules/auth/service/SysOrgService.java b/das/src/main/java/com/das/modules/auth/service/SysOrgService.java index 06d99470..0b3edb36 100644 --- a/das/src/main/java/com/das/modules/auth/service/SysOrgService.java +++ b/das/src/main/java/com/das/modules/auth/service/SysOrgService.java @@ -10,9 +10,9 @@ import java.util.List; public interface SysOrgService { SysOrg createOrg(SysOrgDto sysUserDto); - int updateOrg(SysOrgDto sysUserDto); + void updateOrg(SysOrgDto sysUserDto); - int deleteOrg(DeleteDto deleteDto); + void deleteOrg(DeleteDto deleteDto); PageDataInfo queryOrgList(SysOrgQueryDto sysOrgQueryDto, PageQuery pageQuery); diff --git a/das/src/main/java/com/das/modules/auth/service/SysRoleService.java b/das/src/main/java/com/das/modules/auth/service/SysRoleService.java index da08a4ea..c33b4c80 100644 --- a/das/src/main/java/com/das/modules/auth/service/SysRoleService.java +++ b/das/src/main/java/com/das/modules/auth/service/SysRoleService.java @@ -4,6 +4,7 @@ import com.das.common.utils.PageDataInfo; import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.*; import com.das.modules.auth.domain.vo.SysRoleAuthVo; +import com.das.modules.auth.domain.vo.SysRoleVo; import com.das.modules.auth.entity.SysRole; import java.util.List; @@ -13,9 +14,9 @@ public interface SysRoleService { SysRoleDto updateRole(SysRoleDto sysRoleDto); - int deleteRole(DeleteDto deleteDto); + void deleteRole(DeleteDto deleteDto); - PageDataInfo queryRoleList(SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery); + PageDataInfo queryRoleList(SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery); List queryAuthorityById(SysRoleQueryDto sysRoleQueryDto); } diff --git a/das/src/main/java/com/das/modules/auth/service/SysUserService.java b/das/src/main/java/com/das/modules/auth/service/SysUserService.java index 91ec5a93..0bf4c4e2 100644 --- a/das/src/main/java/com/das/modules/auth/service/SysUserService.java +++ b/das/src/main/java/com/das/modules/auth/service/SysUserService.java @@ -5,14 +5,15 @@ import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.DeleteDto; import com.das.modules.auth.domain.dto.SysUserDto; import com.das.modules.auth.domain.dto.SysUserQueryDto; +import com.das.modules.auth.domain.vo.SysUserVo; import com.das.modules.auth.entity.SysUser; public interface SysUserService { - SysUser createUser(SysUserDto sysUserDto); + SysUserDto createUser(SysUserDto sysUserDto); - int updateUser(SysUserDto sysUserDto); + SysUserDto updateUser(SysUserDto sysUserDto); - int deleteUser(DeleteDto deleteDto); + void deleteUser(DeleteDto deleteDto); - PageDataInfo queryUserList(SysUserQueryDto sysUserQueryDto, PageQuery pageQuery); + PageDataInfo queryUserList(SysUserQueryDto sysUserQueryDto, PageQuery pageQuery); } diff --git a/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java index b4717b6c..146cab73 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/LoginServiceImpl.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.das.common.captcha.CaptchaUtils; import com.das.common.config.SaTokenProperties; +import com.das.common.config.SessionUtil; import com.das.common.utils.AdminRedisTemplate; import com.das.modules.auth.domain.vo.LoginUserDetailsVo; import com.das.modules.auth.domain.dto.LoginDto; @@ -75,10 +76,18 @@ public class LoginServiceImpl implements LoginService { sysUserVo.setEmail(sysUser.getEmail()); sysUserVo.setOrgId(sysUser.getOrgId()); + //查询用户权限列表 + sysUserVo.setAuthorities(sysUserMapper.queryAuthoritiesByUserId(sysUser.getId())); + loginInfo.setSysUser(sysUserVo); // 存储用户信息到会话 loginInfo.setToken(token); loginInfo.setRefreshToken(refreshTokenUuid); + adminRedisTemplate.setEx(refreshToken, loginInfo, Duration.ofSeconds(saTokenProperties.getRefreshExpireTime())); + + //将登录用户信息存入 Session + StpUtil.getTokenSession().set(SessionUtil.SESSION_USER_KEY, sysUserVo); + return loginInfo; } diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysAuthorityServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysAuthorityServiceImpl.java index e3d37dc4..b1738198 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysAuthorityServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysAuthorityServiceImpl.java @@ -30,9 +30,9 @@ public class SysAuthorityServiceImpl implements SysAuthorityService { @PostConstruct public void init() { List list = new ArrayList<>(); - list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN,"systemMgr","系统管理权限",1)); - list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR,"equipmentLedgerManagement","设备台账维护权限",1)); - list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_VIEW,"equipmentLedgerView","设备台账浏览权限",1)); + list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_ADMIN,"SYS_AUTHORITY_ID_ADMIN","系统管理权限",1)); + list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_MGR,"SYS_AUTHORITY_ID_DEVICE_MGR","设备台账维护权限",1)); + list.add(new SysAuthority(SysAuthorityIds.SYS_AUTHORITY_ID_DEVICE_VIEW,"SYS_AUTHORITY_ID_DEVICE_VIEW","设备台账浏览权限",1)); try { // 性能优化:先查询所有需要的权限是否存在,减少数据库访问次数 diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java index 4d06a270..2139ea50 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysMenuServiceImpl.java @@ -39,15 +39,16 @@ public class SysMenuServiceImpl implements SysMenuService { } @Override - public int updateMenu(SysMenuDto sysMenuDto) { + public void updateMenu(SysMenuDto sysMenuDto) { SysMenu sysMenu = new SysMenu(); BeanCopyUtils.copy(sysMenuDto,sysMenu); - return sysMenuMapper.updateById(sysMenu); + sysMenu.setUpdatedTime(new Date()); + sysMenuMapper.updateById(sysMenu); } @Override - public int deleteMenu(DeleteDto deleteDto) { - return sysMenuMapper.deleteById(deleteDto.getId()); + public void deleteMenu(DeleteDto deleteDto) { + sysMenuMapper.deleteById(deleteDto.getId()); } @Override @@ -58,14 +59,10 @@ public class SysMenuServiceImpl implements SysMenuService { @Override public List queryAllMenuList(SysMenuQueryDto sysMenuQueryDto) { - List list = new ArrayList<>(); if(sysMenuQueryDto.getRecursive()) { sysMenuQueryDto.setParentMenuId(0L); - list = sysMenuMapper.queryAllMenuList(sysMenuQueryDto); - } else { - list = sysMenuMapper.queryAllMenuListByParentId(sysMenuQueryDto); } - + List list = sysMenuMapper.queryAllMenuList(sysMenuQueryDto); return list; } diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java index c0d71105..eb2e0767 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysOrgServiceImpl.java @@ -1,6 +1,5 @@ package com.das.modules.auth.service.impl; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.das.common.utils.BeanCopyUtils; import com.das.common.utils.PageDataInfo; @@ -37,15 +36,15 @@ public class SysOrgServiceImpl implements SysOrgService { } @Override - public int updateOrg(SysOrgDto sysOrgDto) { + public void updateOrg(SysOrgDto sysOrgDto) { SysOrg sysOrg = new SysOrg(); BeanCopyUtils.copy(sysOrgDto,sysOrg); - return sysOrgMapper.updateById(sysOrg); + sysOrgMapper.updateById(sysOrg); } @Override - public int deleteOrg(DeleteDto deleteDto) { - return sysOrgMapper.deleteById(deleteDto.getId()); + public void deleteOrg(DeleteDto deleteDto) { + sysOrgMapper.deleteById(deleteDto.getId()); } @Override diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysRoleServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysRoleServiceImpl.java index c9a34e3c..d56c282b 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysRoleServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysRoleServiceImpl.java @@ -11,6 +11,7 @@ import com.das.modules.auth.domain.dto.DeleteDto; import com.das.modules.auth.domain.dto.SysRoleDto; import com.das.modules.auth.domain.dto.SysRoleQueryDto; import com.das.modules.auth.domain.vo.SysRoleAuthVo; +import com.das.modules.auth.domain.vo.SysRoleVo; import com.das.modules.auth.entity.SysRole; import com.das.modules.auth.entity.SysRoleAuthority; import com.das.modules.auth.mapper.SysAuthorityMapper; @@ -160,7 +161,7 @@ public class SysRoleServiceImpl implements SysRoleService { } @Override - public int deleteRole(DeleteDto deleteDto) { + public void deleteRole(DeleteDto deleteDto) { SysRole sysRole = sysRoleMapper.selectById(deleteDto.getId()); if (StringUtils.isEmpty(deleteDto.getId())) { throw new ServiceException("参数缺失"); @@ -178,12 +179,12 @@ public class SysRoleServiceImpl implements SysRoleService { authorityInfoQueryWrapper.eq("role_id", deleteDto.getId()); sysRoleAuthorityMapper.delete(authorityInfoQueryWrapper); //删除角色 - return sysRoleMapper.deleteById(deleteDto.getId()); + sysRoleMapper.deleteById(deleteDto.getId()); } @Override - public PageDataInfo queryRoleList(SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery) { - IPage iPage = sysRoleMapper.queryRoleList(pageQuery.build(), sysRoleQueryDto); + public PageDataInfo queryRoleList(SysRoleQueryDto sysRoleQueryDto, PageQuery pageQuery) { + IPage iPage = sysRoleMapper.queryRoleList(pageQuery.build(), sysRoleQueryDto); return PageDataInfo.build(iPage.getRecords(), iPage.getTotal()); } diff --git a/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java b/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java index 63497e7b..dcf3668d 100644 --- a/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java +++ b/das/src/main/java/com/das/modules/auth/service/impl/SysUserServiceImpl.java @@ -1,6 +1,9 @@ package com.das.modules.auth.service.impl; +import cn.dev33.satoken.secure.BCrypt; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.das.common.exceptions.ServiceException; import com.das.common.utils.BeanCopyUtils; import com.das.common.utils.SequenceUtils; import com.das.common.utils.PageDataInfo; @@ -8,46 +11,183 @@ import com.das.common.utils.PageQuery; import com.das.modules.auth.domain.dto.DeleteDto; import com.das.modules.auth.domain.dto.SysUserDto; import com.das.modules.auth.domain.dto.SysUserQueryDto; +import com.das.modules.auth.domain.vo.SysUserVo; +import com.das.modules.auth.entity.SysRole; +import com.das.modules.auth.entity.SysRoleAuthority; import com.das.modules.auth.entity.SysUser; +import com.das.modules.auth.entity.SysUserRole; +import com.das.modules.auth.mapper.SysRoleMapper; import com.das.modules.auth.mapper.SysUserMapper; +import com.das.modules.auth.mapper.SysUserRoleMapper; import com.das.modules.auth.service.SysUserService; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.Date; +import java.util.List; @Service public class SysUserServiceImpl implements SysUserService { + private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); + + @Autowired SysUserMapper sysUserMapper; + + @Autowired + SysRoleMapper sysRoleMapper; + + @Autowired + SysUserRoleMapper sysUserRoleMapper; + @Override - public SysUser createUser(SysUserDto sysUserDto) { + public SysUserDto createUser(SysUserDto sysUserDto) { + + //根据账号account判断是否存在 + long roleCount = sysUserMapper.existUserByAccount(sysUserDto.getAccount()); + if (roleCount > 0) { + throw new ServiceException(String.format("账号 %s 已存在", sysUserDto.getAccount())); + } + SysUser sysUser = new SysUser(); BeanCopyUtils.copy(sysUserDto,sysUser); + //密码加密 + String passwordEncode = BCrypt.hashpw(sysUserDto.getPassword(), BCrypt.gensalt()); sysUser.setId(SequenceUtils.generateId()); sysUser.setRevision(1); sysUser.setCreatedTime(new Date()); sysUser.setUpdatedTime(new Date()); + sysUser.setPassword(passwordEncode); sysUserMapper.insert(sysUser); - return sysUser; + + if (sysUserDto.getRoleList() != null && sysUserDto.getRoleList().size() > 0) { + //验证角色有效性 + String errorRoles = checkErrorRole(sysUserDto.getRoleList()); + if (StringUtils.hasText(errorRoles)) { + throw new ServiceException("角色不存在 " + errorRoles); + } + //解锁role与Account绑定 + QueryWrapper accountRoleQueryWrapper = new QueryWrapper<>(); + accountRoleQueryWrapper.eq("user_id",sysUser.getId()); + sysUserRoleMapper.delete(accountRoleQueryWrapper); + //绑定角色 + for (Long roleId : sysUserDto.getRoleList()) { + SysUserRole accountRole = new SysUserRole(); + accountRole.setUserId(sysUser.getId()); + accountRole.setRoleId(roleId); + accountRole.setRevision(1); + accountRole.setCreatedTime(new Date()); + accountRole.setUpdatedTime(new Date()); + sysUserRoleMapper.insert(accountRole); + } + } + // 消除密码 + sysUserDto.setPassword(null); + return sysUserDto; + } + + /** + * 验证角色是否存在 + */ + private String checkErrorRole(List roles) { + if (roles != null && roles.size() > 0) { + List errorRole = new ArrayList<>(); + for (Long roleId : roles) { + if (roleId == null) { + continue; + } + long roleCount = sysRoleMapper.existRoleByRoleId(roleId); + if (roleCount == 0) { + errorRole.add(roleId); + } + } + if (errorRole.size() > 0) { + try { + return JSON_MAPPER.writeValueAsString(errorRole); + } catch (JsonProcessingException e) { + return null; + } + } + } + return null; } @Override - public int updateUser(SysUserDto sysUserDto) { - SysUser sysUser = new SysUser(); - BeanCopyUtils.copy(sysUserDto,sysUser); - return sysUserMapper.updateById(sysUser); + public SysUserDto updateUser(SysUserDto sysUserDto) { + if (sysUserDto.getId() == null) { + throw new ServiceException("参数缺失"); + } + + SysUser sysUser = sysUserMapper.selectById(sysUserDto.getId()); + if (sysUser == null) { + throw new ServiceException(String.format("账号 %d 不存在", sysUserDto.getId())); + } + if (StringUtils.hasText(sysUserDto.getUserName())) { + //若与数据库中账户名相同 则表示未对名称进行修改 + if (!sysUser.getUserName().equals(sysUserDto.getUserName())) { + //判断账户名是否存在 + long userCount = sysUserMapper.existUserByUserName(sysUserDto.getUserName()); + if (userCount > 0) { + throw new ServiceException(String.format("账户名 %s 已存在", sysUserDto.getUserName())); + } + } + } + SysUser newSysUser = new SysUser(); + BeanUtils.copyProperties(sysUserDto, newSysUser, "password"); + sysUserMapper.updateById(newSysUser); + + if (sysUserDto.getRoleList() != null) { + //验证角色有效性 + String errorRoles = checkErrorRole(sysUserDto.getRoleList()); + if (StringUtils.hasText(errorRoles)) { + throw new ServiceException("角色不存在 " + errorRoles); + } + //解锁role与Account绑定 + QueryWrapper accountRoleQueryWrapper = new QueryWrapper<>(); + accountRoleQueryWrapper.eq("user_id",newSysUser.getId()); + sysUserRoleMapper.delete(accountRoleQueryWrapper); + //绑定角色 + for (Long roleId : sysUserDto.getRoleList()) { + + SysUserRole accountRole = new SysUserRole(); + accountRole.setUserId(sysUser.getId()); + accountRole.setRoleId(roleId); + accountRole.setRevision(1); + accountRole.setCreatedTime(new Date()); + accountRole.setUpdatedTime(new Date()); + sysUserRoleMapper.insert(accountRole); + } + } + return sysUserDto; } @Override - public int deleteUser(DeleteDto deleteDto) { - return sysUserMapper.deleteById(deleteDto.getId()); + public void deleteUser(DeleteDto deleteDto) { + if (StringUtils.isEmpty(deleteDto.getId())) { + throw new ServiceException("参数缺失"); + } + SysUser sysUser = sysUserMapper.selectById(deleteDto.getId()); + if (sysUser == null) { + throw new ServiceException("账号不存在"); + } + + //解锁role与用户绑定 + QueryWrapper accountRoleQueryWrapper = new QueryWrapper<>(); + accountRoleQueryWrapper.eq("user_id", deleteDto.getId()); + this.sysUserRoleMapper.delete(accountRoleQueryWrapper); + //删除角色 + sysUserMapper.deleteById(deleteDto.getId()); } @Override - public PageDataInfo queryUserList(SysUserQueryDto sysUserQueryDto, PageQuery pageQuery) { - IPage iPage = sysUserMapper.queryUserList(pageQuery.build(), sysUserQueryDto); + public PageDataInfo queryUserList(SysUserQueryDto sysUserQueryDto, PageQuery pageQuery) { + IPage iPage = sysUserMapper.queryUserList(pageQuery.build(), sysUserQueryDto); return PageDataInfo.build(iPage.getRecords(), iPage.getTotal()); } } diff --git a/das/src/main/resources/mapper/SysMenuMapper.xml b/das/src/main/resources/mapper/SysMenuMapper.xml index ecf33b24..d05ab257 100644 --- a/das/src/main/resources/mapper/SysMenuMapper.xml +++ b/das/src/main/resources/mapper/SysMenuMapper.xml @@ -46,6 +46,9 @@ and parent_menu_id = #{sysMenu.parentMenuId} + + and menu_name = #{sysMenu.menuName} + @@ -53,11 +56,6 @@ select * from sys_menu where parent_menu_id = #{sysMenu.parentMenuId} - - - diff --git a/das/src/main/resources/mapper/SysOrgMapper.xml b/das/src/main/resources/mapper/SysOrgMapper.xml index 19fd3e9f..b02912da 100644 --- a/das/src/main/resources/mapper/SysOrgMapper.xml +++ b/das/src/main/resources/mapper/SysOrgMapper.xml @@ -2,7 +2,7 @@ - + @@ -13,42 +13,41 @@ + - - - - diff --git a/das/src/main/resources/mapper/SysRoleMapper.xml b/das/src/main/resources/mapper/SysRoleMapper.xml index 5e3985b5..9ede2958 100644 --- a/das/src/main/resources/mapper/SysRoleMapper.xml +++ b/das/src/main/resources/mapper/SysRoleMapper.xml @@ -13,7 +13,15 @@ - select * from sys_role @@ -27,6 +35,10 @@ select count(1) from sys_role t where t.role_code=#{roleCode} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/api/api_list.md b/docs/api/api_list.md index f59c2fd8..ca2615e2 100644 --- a/docs/api/api_list.md +++ b/docs/api/api_list.md @@ -757,8 +757,7 @@ ```json { "userName":"xx", -"orgId":"xxx", -"phone":"xxx" +"orgId":"xxx" } ``` @@ -768,41 +767,51 @@ |:---------| :------: | :---: |:--------------------------| | userName | String | Yes | 模糊查询职员名称,当职员名称为空时查询所有职员信息 | | orgId | BIGINT | Yes | 所属机构ID | -| phone | String | Yes | 手机号,模糊查询 | 调用成功返回示例 ```json { - "code":"200", - "msg":"调用成功", - "data": [ + "total": 1, + "rows": [ { - "id": "xxxx", - "account": "xxx", - "password": "xxx", - "userName": "xxx", - "email":"xxx", - "phone":"xxx", - "orgId":"xxx" - }, - { - ... + "id": 73238484643741696, + "account": "test1", + "userName": "测试1", + "revision": 1, + "phone": "1231212", + "email": "测试", + "orgId": 1, + "roleList": [ + { + "id": 73220290639036416, + "roleCode": "1212", + "roleName": "测试角色1", + "revision": 1 + }, + { + "id": 73212978522226688, + "roleCode": "0011", + "roleName": "测试角色", + "revision": 1 + } + ] } ], - "success": true + "code": 200, + "msg": "查询成功" } ``` -| 变量名 | 变量类型 | 可为NULL | 描述 | -| -------- | -------- | -------- | ------------------ | -| id | BIGINT | No | 主键(雪花算法生成) | -| account | String | No | 登录账号 | -| password | String | No | 加密后的密码 | -| userName | String | No | 职员名称 | -| email | String | No | 职员邮箱 | -| phone | String | No | 职员联系电话 | -| orgId | BIGINT | No | 所属机构ID | +| 变量名 | 变量类型 | 可为NULL | 描述 | +| -------- |--------| -------- |------------| +| id | BIGINT | No | 主键(雪花算法生成) | +| account | String | No | 登录账号 | +| userName | String | No | 职员名称 | +| email | String | No | 职员邮箱 | +| phone | String | No | 职员联系电话 | +| orgId | BIGINT | No | 所属机构ID | +| roleList | List | No | 角色集合 | ## 职员创建 @@ -819,29 +828,37 @@ "userName": "xxx", "email":"xxx", "phone":"xxx", - "orgId":"xxx" + "orgId":"xxx", + "roleList":[73220290639036416,73212978522226688] } ``` 入参描述 -| 变量名 | 变量类型 | 可为NULL | 描述 | -| -------- | -------- | -------- | ------------ | -| account | String | No | 登录账号 | -| password | String | No | 加密后的密码 | -| userName | String | No | 职员名称 | -| email | String | No | 职员邮箱 | -| phone | String | No | 职员联系电话 | -| orgId | BIGINT | No | 所属机构ID | +| 变量名 | 变量类型 | 可为NULL | 描述 | +| -------- |--------| -------- |--------| +| account | String | No | 登录账号 | +| password | String | No | 加密后的密码 | +| userName | String | No | 职员名称 | +| email | String | No | 职员邮箱 | +| phone | String | No | 职员联系电话 | +| orgId | BIGINT | No | 所属机构ID | +| roleList | List | No | 角色id集合 | 调用成功返回示例 ```json { -"code":"200", -"msg":"创建成功", -"data":"null", -"success": true + "code": 200, + "success": true, + "data": { + "account": "test1", + "roleList": [ + 73220290639036416, + 73212978522226688 + ] + }, + "msg": "操作成功" } ``` @@ -859,11 +876,11 @@ { "id":"xxx", "account": "xxx", - "password": "xxx", "userName": "xxx", "email":"xxx", "phone":"xxx", - "orgId":"xxx" + "orgId":"xxx", + "roleList":[73220290639036416,73212978522226688] } ``` @@ -873,20 +890,19 @@ | -------- | -------- | -------- | ------------------ | | id | BIGINT | No | 主键(雪花算法生成) | | account | String | No | 登录账号 | -| password | String | No | 加密后的密码 | | userName | String | No | 职员名称 | | email | String | No | 职员邮箱 | | phone | String | No | 职员联系电话 | | orgId | BIGINT | No | 所属机构ID | +| roleList | List | No | 角色id集合 | 调用成功返回示例 ```json { -"code":"200", -"msg":"修改成功", -"data":"null", -"success": true + "code": 200, + "success": true, + "msg": "操作成功" } ``` @@ -914,10 +930,9 @@ ```json { -"code":"200", -"msg":"修改成功", -"data":"null", -"success": true + "code": 200, + "success": true, + "msg": "操作成功" } ``` diff --git a/ui/dasadmin/src/api/backend/index.ts b/ui/dasadmin/src/api/backend/index.ts index dff24c87..9526703a 100644 --- a/ui/dasadmin/src/api/backend/index.ts +++ b/ui/dasadmin/src/api/backend/index.ts @@ -28,3 +28,102 @@ export function logout() { method: 'POST', }) } +//菜单树 +export function menusTree(params: object = {}) { + return createAxios({ + url: '/api/menus/list', + method: 'POST', + data: params, + }) +} + + +// 菜单管理查询 +export function menusQuery(params: object = {}) { + return createAxios({ + url: '/api/menus/query', + method: 'POST', + data: params, + }) +} + +// 菜单修改 +export function menusUpdate(params: object = {}) { + return createAxios({ + url: '/api/menus/update', + method: 'POST', + data: params, + }) +} + +// 菜单删除 +export function menuDelete(params: object = {}) { + return createAxios({ + url: '/api/menus/delete', + method: 'POST', + data: params, + }) +} + +// 菜单新增 +export function menuAdd(params: object = {}) { + return createAxios({ + url: '/api/menus/add', + method: 'POST', + data: params, + }) +} + +// 用户查询 +export function userQuery(params: object = {}) { + return createAxios({ + url: '/api/user/query', + method: 'POST', + data: params, + }) +} + +// 用户修改 +export function userUpdate(params: object = {}) { + return createAxios({ + url: '/api/user/update', + method: 'POST', + data: params, + }) +} + +// 用户删除 +export function userDelete(params: object = {}) { + return createAxios({ + url: '/api/user/delete', + method: 'POST', + data: params, + }) +} + +// 用户新增 +export function userAdd(params: object = {}) { + return createAxios({ + url: '/api/user/add', + method: 'POST', + data: params, + }) +} + +// 用户左边树 +export function userList(params: object = {}) { + return createAxios({ + url: 'api/org/list', + method: 'POST', + data: params, + }) +} + +// 所有权限查询 +export function allPermissionQuery(params: object = {}) { + return createAxios({ + url: '/api/authority/query', + method: 'POST', + data: params, + }) +} diff --git a/ui/dasadmin/src/layouts/backend/index.vue b/ui/dasadmin/src/layouts/backend/index.vue index 25e87b19..74ca4e8e 100644 --- a/ui/dasadmin/src/layouts/backend/index.vue +++ b/ui/dasadmin/src/layouts/backend/index.vue @@ -99,107 +99,35 @@ const menu = [ extend: 'none', children: [ { - id: 99, - pid: 98, + id: 816, + pid: 108, type: 'menu', - title: '角色管理', - name: 'auth\/RoleManagement', - path: 'auth\/RoleManagement', + title: '菜单配置', + name: 'auth\/menuManagement', + path: 'auth\/menuManagement', icon: 'fa fa-group', menu_type: 'tab', url: '', - component: '\/src\/views\/backend\/RoleManagement\/RoleManagement.vue', - keepalive: 'auth\/RoleManagement', + component: '\/src\/views\/backend\/auth\/menuManagement\/index.vue', + keepalive: 'auth\/menuManagement', extend: 'none', children: [], }, { - id: 97, - pid: 96, + id: 777, + pid: 201, type: 'menu', - title: '机构管理', - name: 'auth\/InstitutionalManagement', - path: 'auth\/InstitutionalManagement', + title: '用户管理', + name: 'auth\/userManagement', + path: 'auth\/userManagement', icon: 'fa fa-group', menu_type: 'tab', url: '', - component: '\/src\/views\/backend\/InstitutionalManagement\/InstitutionalManagement.vue', - keepalive: 'auth\/InstitutionalManagement', + component: '\/src\/views\/backend\/auth\/userManagement\/index.vue', + keepalive: 'auth\/userManagement', extend: 'none', children: [], }, - { - id: 3, - pid: 2, - type: 'menu', - title: '角色组管理', - name: 'auth\/group', - path: 'auth\/group', - icon: 'fa fa-group', - menu_type: 'tab', - url: '', - component: '\/src\/views\/backend\/auth\/group\/index.vue', - keepalive: 'auth\/group', - extend: 'none', - children: [ - { - id: 4, - pid: 3, - type: 'button', - title: '查看', - name: 'auth\/group\/index', - path: '', - icon: '', - menu_type: null, - url: '', - component: '', - keepalive: 0, - extend: 'none', - }, - { - id: 5, - pid: 3, - type: 'button', - title: '添加', - name: 'auth\/group\/add', - path: '', - icon: '', - menu_type: null, - url: '', - component: '', - keepalive: 0, - extend: 'none', - }, - { - id: 6, - pid: 3, - type: 'button', - title: '编辑', - name: 'auth\/group\/edit', - path: '', - icon: '', - menu_type: null, - url: '', - component: '', - keepalive: 0, - extend: 'none', - }, - { - id: 7, - pid: 3, - type: 'button', - title: '删除', - name: 'auth\/group\/del', - path: '', - icon: '', - menu_type: null, - url: '', - component: '', - keepalive: 0, - extend: 'none', - }, - ], - }, { id: 8, pid: 2, diff --git a/ui/dasadmin/src/views/backend/auth/group/index.vue b/ui/dasadmin/src/views/backend/auth/group/index.vue deleted file mode 100644 index bd4ab126..00000000 --- a/ui/dasadmin/src/views/backend/auth/group/index.vue +++ /dev/null @@ -1,178 +0,0 @@ - - - - - diff --git a/ui/dasadmin/src/views/backend/auth/group/popupForm.vue b/ui/dasadmin/src/views/backend/auth/group/popupForm.vue deleted file mode 100644 index 10a0cecf..00000000 --- a/ui/dasadmin/src/views/backend/auth/group/popupForm.vue +++ /dev/null @@ -1,168 +0,0 @@ - - - - - diff --git a/ui/dasadmin/src/views/backend/auth/menuManagement/index.vue b/ui/dasadmin/src/views/backend/auth/menuManagement/index.vue new file mode 100644 index 00000000..ee1cc4b5 --- /dev/null +++ b/ui/dasadmin/src/views/backend/auth/menuManagement/index.vue @@ -0,0 +1,666 @@ + + + + + diff --git a/ui/dasadmin/src/views/backend/auth/userManagement/index.vue b/ui/dasadmin/src/views/backend/auth/userManagement/index.vue new file mode 100644 index 00000000..88b154fd --- /dev/null +++ b/ui/dasadmin/src/views/backend/auth/userManagement/index.vue @@ -0,0 +1,378 @@ + + + + + diff --git a/ui/dasadmin/src/views/backend/login.vue b/ui/dasadmin/src/views/backend/login.vue index e8929593..bccf7f2d 100644 --- a/ui/dasadmin/src/views/backend/login.vue +++ b/ui/dasadmin/src/views/backend/login.vue @@ -183,18 +183,18 @@ const onSubmit = () => { state.submitLoading = true login(form) .then((res) => { - if (res.code == 200) { + if (res.code == 200) { adminInfo.dataFill({ id: res.data.sysUser.id, username: res.data.sysUser.account, nickname: res.data.sysUser.userName, + orgid: res.data.sysUser.orgId, avatar: '', last_login_time: '', token: res.data.token, refresh_token: res.data.refershToken, // 是否是superAdmin,用于判定是否显示终端按钮等,不做任何权限判断 super: false, - orgid:res.data.sysUser.orgId }) router.push({ path: adminBaseRoutePath }) } else { @@ -213,8 +213,6 @@ const onSubmit = () => {