SysUserV2Controller.java 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. package com.backendsys.modules.system.controller;
  2. import cn.hutool.core.collection.CollUtil;
  3. import cn.hutool.core.util.ObjectUtil;
  4. import cn.hutool.core.util.ClassUtil;
  5. import com.backendsys.aspect.QueryNullCheck;
  6. import com.backendsys.exception.CustException;
  7. import com.backendsys.modules.common.config.security.enums.SecurityEnum;
  8. import com.backendsys.modules.common.config.security.utils.SecurityUtil;
  9. import com.backendsys.modules.common.utils.Result;
  10. import com.backendsys.modules.system.entity.SysUser.SysUserDTO;
  11. import com.backendsys.modules.system.service.SysUserV2Service;
  12. import com.backendsys.service.System.SysUserService;
  13. import io.swagger.v3.oas.annotations.Operation;
  14. import io.swagger.v3.oas.annotations.Parameter;
  15. import io.swagger.v3.oas.annotations.tags.Tag;
  16. import jakarta.servlet.http.HttpServletRequest;
  17. import org.springframework.beans.factory.annotation.Autowired;
  18. import org.springframework.security.access.prepost.PreAuthorize;
  19. import org.springframework.validation.annotation.Validated;
  20. import org.springframework.web.bind.annotation.*;
  21. import java.util.List;
  22. @Validated
  23. @RestController
  24. @Tag(name = "系统用户")
  25. public class SysUserV2Controller {
  26. /**
  27. * TODO 1.手机号码字段,需要经过验证码校验,不能用 updateUserInfo 改 (待修改)
  28. * TODO 2.审核用户,需要单独的表做审核记录,不能直接改字段
  29. */
  30. @Autowired
  31. private SysUserV2Service sysUserV2Service;
  32. @Operation(summary = "获得系统用户列表")
  33. @PreAuthorize("@sr.hasPermission('3.2')")
  34. @GetMapping("/api/v2/system/user/getUserList")
  35. public Result getUserList(SysUserDTO sysUserDTO) {
  36. return Result.success().put("data", sysUserV2Service.selectUserList(sysUserDTO));
  37. }
  38. @Operation(summary = "获得系统用户列表 (在线的)")
  39. @PreAuthorize("@ss.hasPermi('3.1')")
  40. @GetMapping("/api/v2/system/user/getUserOnlineList")
  41. public Result getUserOnlineList(SysUserDTO sysUserDTO) {
  42. return Result.success().put("data", sysUserV2Service.selectUserOnlineList(sysUserDTO));
  43. }
  44. /**
  45. * 权限:
  46. * - 查询用户信息 (3.2.1)
  47. * - 查询他人用户信息 (3.2.1.2)
  48. */
  49. @Operation(summary = "获得系统用户详情")
  50. @PreAuthorize("@sr.hasPermission('3.2.1')")
  51. @GetMapping("/api/v2/system/user/getUserDetail")
  52. public Result getUserDetail(@Parameter(description = "用户ID") Long user_id) {
  53. // 查询自身的用户信息 (不传参数)
  54. user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
  55. // 查询他人的用户信息
  56. // - 查询自己 (无需权限)
  57. // - 查询他人 (需要权限或超级管理员)
  58. if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.2.1.2") && !SecurityUtil.isSuper()) {
  59. throw new CustException(SecurityEnum.NOAUTH);
  60. }
  61. return Result.success().put("data", sysUserV2Service.selectUserInfo(user_id));
  62. }
  63. /**
  64. * 权限:
  65. * - 查询用户信息权限 (3.4.1)
  66. * - 查询他人用户信息权限 (3.4.1.2)
  67. */
  68. @Operation(summary = "获得系统用户权限列表")
  69. @PreAuthorize("@sr.hasPermission('3.4.1')")
  70. @GetMapping("/api/v2/system/user/getUserPermission")
  71. public Result getUserPermission(@Parameter(description = "用户ID") Long user_id) {
  72. // 查询自身的用户信息 (不传参数)
  73. user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
  74. // 查询他人的用户信息
  75. // - 查询自己 (无需权限)
  76. // - 查询他人 (需要子权限或超级管理员)
  77. if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
  78. throw new CustException(SecurityEnum.NOAUTH);
  79. }
  80. return Result.success().put("data", sysUserV2Service.selectUserModule(user_id));
  81. }
  82. @Operation(summary = "创建系统用户")
  83. @PreAuthorize("@ss.hasPermi('3.2.2')")
  84. @PostMapping("/api/v2/system/user/createUser")
  85. public Result createUser(@Validated(SysUserDTO.Create.class) @RequestBody SysUserDTO sysUserDTO) {
  86. return Result.success().put("data", sysUserV2Service.insertUser(sysUserDTO));
  87. }
  88. /**
  89. * 权限:
  90. * - 编辑用户信息权限 (3.2.3)
  91. * - 编辑他人用户信息权限 (3.2.3.2)
  92. */
  93. @Operation(summary = "编辑系统用户信息")
  94. @PreAuthorize("@ss.hasPermi('3.2.3')")
  95. @PutMapping("/api/v2/system/user/updateUserInfo")
  96. public Result updateUserInfo(@Validated(SysUserDTO.Update.class) @RequestBody SysUserDTO sysUserDTO) {
  97. // - 不传 user_id 时,修改目标为 当前用户
  98. Long user_id = sysUserDTO.getUser_id();
  99. if (ObjectUtil.isEmpty(user_id)) {
  100. user_id = SecurityUtil.getUserId();
  101. sysUserDTO.setUser_id(user_id);
  102. } else if (!SecurityUtil.getUserId().equals(1L) && user_id.equals(1L)) {
  103. throw new CustException("不能编辑超管账号");
  104. }
  105. // 编辑他人的用户信息
  106. // - 编辑自己 (无需权限)
  107. // - 编辑他人 (需要子权限或超级管理员)
  108. if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
  109. throw new CustException(SecurityEnum.NOAUTH);
  110. }
  111. // 防止手动更新字段
  112. sysUserDTO.setLast_login_time(null);
  113. sysUserDTO.setLast_login_ip(null);
  114. return Result.success().put("data", sysUserV2Service.updateUserInfo(sysUserDTO));
  115. }
  116. /**
  117. * 权限:(同上)
  118. */
  119. @Operation(summary = "编辑系统用户密码")
  120. @PreAuthorize("@ss.hasPermi('3.2.3')")
  121. @PutMapping("/api/v2/system/user/updateUserPassword")
  122. public Result updateUserPassword(@Validated(SysUserDTO.UpdatePassword.class) @RequestBody SysUserDTO sysUserDTO) {
  123. // - 不传 user_id 时,修改目标为 当前用户
  124. Long user_id = sysUserDTO.getUser_id();
  125. if (ObjectUtil.isEmpty(user_id)) {
  126. user_id = SecurityUtil.getUserId();
  127. sysUserDTO.setUser_id(user_id);
  128. } else if (!SecurityUtil.getUserId().equals(1L) && user_id.equals(1L)) {
  129. throw new CustException("不能编辑超管账号");
  130. }
  131. // 编辑他人的用户信息
  132. // - 编辑自己 (无需权限)
  133. // - 编辑他人 (需要子权限或超级管理员)
  134. if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
  135. throw new CustException(SecurityEnum.NOAUTH);
  136. }
  137. return Result.success().put("data", sysUserV2Service.updateUserPassword(sysUserDTO));
  138. }
  139. @Operation(summary = "删除系统用户")
  140. @PreAuthorize("@ss.hasPermi('3.2.4')")
  141. @DeleteMapping("/api/v2/system/user/deleteUser")
  142. public Result deleteUser(@Validated(SysUserDTO.Delete.class) @RequestBody SysUserDTO sysUserDTO) {
  143. List<Long> user_ids = sysUserDTO.getUser_ids();
  144. Long my_user_id = SecurityUtil.getUserId();
  145. if (user_ids.contains(my_user_id)) throw new CustException("不能删除自己的账号");
  146. if (user_ids.contains(1L)) throw new CustException("不能删除超管账号");
  147. return Result.success().put("data", sysUserV2Service.deleteUser(user_ids));
  148. }
  149. }