SysUserController.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. package com.backendsys.modules.system.controller;
  2. import cn.hutool.core.util.ObjectUtil;
  3. import com.backendsys.exception.CustException;
  4. import com.backendsys.modules.common.aspect.SysLog;
  5. import com.backendsys.modules.common.config.security.enums.SecurityEnum;
  6. import com.backendsys.modules.common.config.security.utils.SecurityUtil;
  7. import com.backendsys.modules.common.utils.Result;
  8. import com.backendsys.modules.system.entity.SysUserDTO;
  9. import com.backendsys.modules.system.service.SysUserV2Service;
  10. import io.swagger.v3.oas.annotations.Operation;
  11. import io.swagger.v3.oas.annotations.Parameter;
  12. import io.swagger.v3.oas.annotations.tags.Tag;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.security.access.prepost.PreAuthorize;
  15. import org.springframework.validation.annotation.Validated;
  16. import org.springframework.web.bind.annotation.*;
  17. import java.util.List;
  18. @Validated
  19. @RestController
  20. @Tag(name = "系统用户")
  21. public class SysUserController {
  22. /**
  23. * TODO 1.手机号码字段,需要经过验证码校验,不能用 updateUserInfo 改 (待修改)
  24. * TODO 2.审核用户,需要单独的表做审核记录,不能直接改字段
  25. */
  26. @Autowired
  27. private SysUserV2Service sysUserV2Service;
  28. @Operation(summary = "获取系统用户列表")
  29. @PreAuthorize("@sr.hasPermission('3.2')")
  30. @GetMapping("/api/system/user/getUserList")
  31. public Result getUserList(SysUserDTO sysUserDTO) {
  32. return Result.success().put("data", sysUserV2Service.selectUserList(sysUserDTO));
  33. }
  34. @Operation(summary = "获取系统用户列表 (在线的)")
  35. @PreAuthorize("@sr.hasPermission('3.1')")
  36. @GetMapping("/api/system/user/getUserOnlineList")
  37. public Result getUserOnlineList(SysUserDTO sysUserDTO) {
  38. return Result.success().put("data", sysUserV2Service.selectUserOnlineList(sysUserDTO));
  39. }
  40. /**
  41. * 权限:
  42. * - 查询用户信息 (3.2.1)
  43. * - 查询他人用户信息 (3.2.1.2)
  44. */
  45. @Operation(summary = "获取系统用户详情")
  46. @PreAuthorize("@sr.hasPermission('3.2.1')")
  47. @GetMapping("/api/system/user/getUserDetail")
  48. public Result getUserDetail(@Parameter(description = "用户ID") Long user_id) {
  49. // 查询自身的用户信息 (不传参数)
  50. user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
  51. // 查询他人的用户信息
  52. // - 查询自己 (无需权限)
  53. // - 查询他人 (需要权限或超级管理员)
  54. if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.2.1.2") && !SecurityUtil.isSuper()) {
  55. throw new CustException(SecurityEnum.NOAUTH);
  56. }
  57. return Result.success().put("data", sysUserV2Service.selectUserInfoSimple(user_id));
  58. }
  59. @SysLog("创建系统用户")
  60. @Operation(summary = "创建系统用户")
  61. @PreAuthorize("@sr.hasPermission('3.2.2')")
  62. @PostMapping("/api/system/user/createUser")
  63. public Result createUser(@Validated(SysUserDTO.Create.class) @RequestBody SysUserDTO sysUserDTO) {
  64. return Result.success().put("data", sysUserV2Service.insertUser(sysUserDTO));
  65. }
  66. /**
  67. * 权限:
  68. * - 编辑用户信息权限 (3.2.3)
  69. * - 编辑他人用户信息权限 (3.2.3.2)
  70. */
  71. @Operation(summary = "编辑系统用户信息")
  72. @PreAuthorize("@sr.hasPermission('3.2.3')")
  73. @PutMapping("/api/system/user/updateUserInfo")
  74. public Result updateUserInfo(@Validated(SysUserDTO.Update.class) @RequestBody SysUserDTO sysUserDTO) {
  75. // - 不传 user_id 时,修改目标为 当前用户
  76. Long user_id = sysUserDTO.getUser_id();
  77. if (ObjectUtil.isEmpty(user_id)) {
  78. user_id = SecurityUtil.getUserId();
  79. sysUserDTO.setUser_id(user_id);
  80. } else if (!SecurityUtil.getUserId().equals(1L) && user_id.equals(1L)) {
  81. throw new CustException("不能编辑超管账号");
  82. }
  83. // 编辑他人的用户信息
  84. // - 编辑自己 (无需权限)
  85. // - 编辑他人 (需要子权限或超级管理员)
  86. if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
  87. throw new CustException(SecurityEnum.NOAUTH);
  88. }
  89. // 防止手动更新字段
  90. sysUserDTO.setLast_login_time(null);
  91. sysUserDTO.setLast_login_ip(null);
  92. return Result.success().put("data", sysUserV2Service.updateUserInfo(sysUserDTO));
  93. }
  94. @Operation(summary = "编辑系统用户密码")
  95. @PreAuthorize("@sr.hasPermission('3.2.3.3')")
  96. @PutMapping("/api/system/user/updateUserPassword")
  97. public Result updateUserPassword(@Validated(SysUserDTO.UpdatePassword.class) @RequestBody SysUserDTO sysUserDTO) {
  98. // - 不传 user_id 时,修改目标为 当前用户
  99. Long user_id = sysUserDTO.getUser_id();
  100. if (ObjectUtil.isEmpty(user_id)) {
  101. user_id = SecurityUtil.getUserId();
  102. sysUserDTO.setUser_id(user_id);
  103. } else if (!SecurityUtil.getUserId().equals(1L) && user_id.equals(1L)) {
  104. throw new CustException("不能编辑超管账号");
  105. }
  106. // 编辑他人的用户信息
  107. // - 编辑自己 (无需权限)
  108. // - 编辑他人 (需要子权限或超级管理员)
  109. if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
  110. throw new CustException(SecurityEnum.NOAUTH);
  111. }
  112. return Result.success().put("data", sysUserV2Service.updateUserPassword(sysUserDTO));
  113. }
  114. @Operation(summary = "重置系统用户密码")
  115. @PreAuthorize("@sr.hasPermission('3.2.3.4')")
  116. @PutMapping("/api/system/user/resetUserPassword")
  117. public Result resetUserPassword(@Validated(SysUserDTO.ResetPassword.class) @RequestBody SysUserDTO sysUserDTO) {
  118. // 判断不可为超级管理员(首位)
  119. Long user_id = sysUserDTO.getUser_id();
  120. if (user_id.equals(1L)) {
  121. throw new CustException("不能重置超管账号密码");
  122. }
  123. // 判断是否为自身重置,自身密码不能重置,只能修改
  124. Long self_user_id = SecurityUtil.getUserId();
  125. Long request_user_id = sysUserDTO.getUser_id();
  126. if (self_user_id.equals(request_user_id)) {
  127. throw new CustException("不能重置自身密码,请自行修改密码");
  128. }
  129. return Result.success().put("data", sysUserV2Service.resetUserPassword(sysUserDTO));
  130. }
  131. @Operation(summary = "删除系统用户")
  132. @PreAuthorize("@sr.hasPermission('3.2.4')")
  133. @DeleteMapping("/api/system/user/deleteUser")
  134. public Result deleteUser(@Validated(SysUserDTO.Delete.class) @RequestBody SysUserDTO sysUserDTO) {
  135. Long user_id = sysUserDTO.getUser_id();
  136. List<Long> user_ids = sysUserDTO.getUser_ids();
  137. if (user_id == null && (user_ids == null || user_ids.size() == 0)) throw new CustException("user_id 或 user_ids 必填");
  138. if (user_ids != null && user_ids.contains(SecurityUtil.getUserId()) && !user_id.equals(SecurityUtil.getUserId())) throw new CustException("不能删除自己的账号");
  139. if (user_ids != null && user_ids.contains(1L) && !user_id.equals(1L)) throw new CustException("不能删除超管账号");
  140. return Result.success().put("data", sysUserV2Service.deleteUser(sysUserDTO));
  141. }
  142. @Operation(summary = "踢出系统用户")
  143. @PreAuthorize("@sr.hasPermission('3.2.7')")
  144. @PostMapping("/api/system/user/kickUser")
  145. public Result kickUser(@Validated(SysUserDTO.Kick.class) @RequestBody SysUserDTO sysUserDTO) {
  146. Long user_id = sysUserDTO.getUser_id();
  147. if (user_id.equals(1L)) throw new CustException("不能踢出超管账号");
  148. if (user_id.equals(SecurityUtil.getUserId())) throw new CustException("不能踢出自己的账号");
  149. return Result.success().put("data", sysUserV2Service.kickUser(user_id));
  150. }
  151. /**
  152. * 权限:
  153. * - 查询用户权限 (3.4.1)
  154. * - 查询他人用户权限 (3.4.1.2)
  155. */
  156. @Operation(summary = "获取系统用户权限")
  157. @PreAuthorize("@sr.hasPermission('3.4.1')")
  158. @GetMapping("/api/system/user/getUserPermission")
  159. public Result getUserPermission(@Parameter(description = "用户ID") Long user_id) {
  160. // 查询自身的用户信息 (不传参数)
  161. user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
  162. // 查询他人的用户信息
  163. // - 查询自己 (无需权限)
  164. // - 查询他人 (需要子权限或超级管理员)
  165. if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
  166. throw new CustException(SecurityEnum.NOAUTH);
  167. }
  168. return Result.success().put("data", sysUserV2Service.selectUserPermission(user_id));
  169. }
  170. /**
  171. * 权限:
  172. * - 查询用户菜单 (3.5.1)
  173. * - 查询他人用户菜单 (3.5.1.2)
  174. */
  175. @Operation(summary = "获取系统用户菜单")
  176. @PreAuthorize("@sr.hasPermission('3.5.1')")
  177. @GetMapping("/api/system/user/getUserMenu")
  178. public Result getUserMenu(@Parameter(description = "用户ID") Long user_id) {
  179. // 查询自身的用户信息 (不传参数)
  180. user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
  181. // 查询他人的用户信息
  182. // - 查询自己 (无需权限)
  183. // - 查询他人 (需要子权限或超级管理员)
  184. if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
  185. throw new CustException(SecurityEnum.NOAUTH);
  186. }
  187. return Result.success().put("data", sysUserV2Service.selectUserMenu(user_id));
  188. }
  189. }