From 4ed7943235adecd9289cd818c42d768695464af9 Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Sat, 20 May 2023 02:13:19 +0800 Subject: [PATCH] Refactored ResponseResult, added api documentation for PowerController, RoleController, GroupController and UserController --- .../cfive/pinnacle/config/SecurityConfig.java | 2 +- .../pinnacle/controller/GroupController.java | 26 +++++++++++-- .../pinnacle/controller/RoleController.java | 26 +++++++++++-- .../controller/RoleGroupController.java | 18 --------- .../pinnacle/controller/UserController.java | 16 +++++--- .../controller/UserGroupController.java | 18 --------- .../controller/UserRoleController.java | 18 --------- .../permission/PowerController.java | 8 +++- .../entity/common/ResponseResult.java | 37 +++++++++++-------- 9 files changed, 83 insertions(+), 86 deletions(-) delete mode 100644 Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleGroupController.java delete mode 100644 Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserGroupController.java delete mode 100644 Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserRoleController.java diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/config/SecurityConfig.java b/Pinnacle/src/main/java/com/cfive/pinnacle/config/SecurityConfig.java index 44b0ec7..4bb476a 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/config/SecurityConfig.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/config/SecurityConfig.java @@ -83,7 +83,7 @@ public class SecurityConfig { // Allow anonymous access .authorizeHttpRequests() - .requestMatchers("/login", "/doc.html", "swagger-ui/**", "/webjars/**", "/v3/**") + .requestMatchers("/login", "/doc.html", "/swagger-ui/**", "/webjars/**", "/v3/**", "/swagger-ui.html") .anonymous() // Authentication required diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/GroupController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/GroupController.java index 7b7b8f9..59d85f0 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/GroupController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/GroupController.java @@ -5,7 +5,13 @@ import com.cfive.pinnacle.entity.Group; import com.cfive.pinnacle.entity.common.ResponseCode; import com.cfive.pinnacle.entity.common.ResponseResult; import com.cfive.pinnacle.service.IGroupService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -21,6 +27,7 @@ import java.util.List; */ @RestController @RequestMapping("/group") +@Tag(name = "用户组", description = "用户组相关接口") public class GroupController { private IGroupService groupService; @@ -29,14 +36,18 @@ public class GroupController { this.groupService = groupService; } + @Operation(summary = "获取所有用户组") @GetMapping - public ResponseResult getAllGroup() { + @PreAuthorize("hasAnyAuthority('system:group:all', 'system:group:add', 'system:group:delete', 'system:group:modify', 'system:user:add', 'system:user:modify')") + public ResponseResult> getAllGroup() { List groups = groupService.getAllGroup(); return ResponseResult.databaseSelectSuccess(groups); } + @Operation(summary = "添加用户组") @PostMapping - public ResponseResult addGroup(@RequestBody Group group) { + @PreAuthorize("hasAuthority('system:group:add')") + public ResponseResult addGroup(@RequestBody Group group) { if (!StringUtils.hasText(group.getName())) { return ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "Name cannot be empty", null); } @@ -47,8 +58,13 @@ public class GroupController { } } + @Operation(summary = "删除用户组") + @Parameters({ + @Parameter(name = "id", description = "用户组ID", in = ParameterIn.PATH) + }) @DeleteMapping("/{id}") - public ResponseResult deleteGroup(@PathVariable Long id) { + @PreAuthorize("hasAuthority('system:group:delete')") + public ResponseResult deleteGroup(@PathVariable Long id) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Group::getId, id); if (groupService.remove(wrapper)) { @@ -58,8 +74,10 @@ public class GroupController { } } + @Operation(summary = "修改用户组") @PutMapping - public ResponseResult modifyGroup(@RequestBody Group group) { + @PreAuthorize("hasAuthority('system:group:modify')") + public ResponseResult modifyGroup(@RequestBody Group group) { if (!StringUtils.hasText(group.getName())) { return ResponseResult.build(ResponseCode.DATABASE_UPDATE_ERROR, "Name cannot be empty", null); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java index f11651b..8dfdbd2 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleController.java @@ -5,7 +5,13 @@ import com.cfive.pinnacle.entity.Role; import com.cfive.pinnacle.entity.common.ResponseCode; import com.cfive.pinnacle.entity.common.ResponseResult; import com.cfive.pinnacle.service.IRoleService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; @@ -21,6 +27,7 @@ import java.util.List; */ @RestController @RequestMapping("/role") +@Tag(name = "角色", description = "角色相关接口") public class RoleController { private IRoleService roleService; @@ -30,14 +37,18 @@ public class RoleController { this.roleService = roleService; } + @Operation(summary = "获取所有角色") @GetMapping - public ResponseResult getAllRole() { + @PreAuthorize("hasAnyAuthority('system:role:all', 'system:role:add', 'system:role:delete', 'system:role:modeify', 'system:group:add', 'system:group:modify', 'system:user:add', 'system:user:modify')") + public ResponseResult> getAllRole() { List roles = roleService.getAllRole(); return ResponseResult.databaseSelectSuccess(roles); } + @Operation(summary = "添加角色") @PostMapping - public ResponseResult addRole(@RequestBody Role role) { + @PreAuthorize("hasAuthority('system:role:add')") + public ResponseResult addRole(@RequestBody Role role) { if (!StringUtils.hasText(role.getName())) { return ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "Name cannot be empty", null); } @@ -48,8 +59,13 @@ public class RoleController { } } + @Operation(summary = "删除角色") + @Parameters({ + @Parameter(name = "id", description = "角色ID", in = ParameterIn.PATH) + }) @DeleteMapping("/{id}") - public ResponseResult deleteRole(@PathVariable Long id) { + @PreAuthorize("hasAuthority('system:role:delete')") + public ResponseResult deleteRole(@PathVariable Long id) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Role::getId, id); if (roleService.remove(wrapper)) { @@ -59,8 +75,10 @@ public class RoleController { } } + @Operation(summary = "修改角色") @PutMapping() - public ResponseResult modifyRole(@RequestBody Role role) { + @PreAuthorize("hasAuthority('system:role:modify')") + public ResponseResult modifyRole(@RequestBody Role role) { if (!StringUtils.hasText(role.getName())) { return ResponseResult.build(ResponseCode.DATABASE_UPDATE_ERROR, "Name cannot be empty", null); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleGroupController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleGroupController.java deleted file mode 100644 index 66beee5..0000000 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/RoleGroupController.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.cfive.pinnacle.controller; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 中间表-角色-用户组 前端控制器 - *

- * - * @author FatttSnake - * @since 2023-04-30 - */ -@RestController -@RequestMapping("/roleGroup") -public class RoleGroupController { - -} diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java index 164ccaa..697236b 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserController.java @@ -31,20 +31,22 @@ public class UserController { } @GetMapping - @PreAuthorize("hasAuthority('system:user:all')") - public ResponseResult getAllUser() { + @PreAuthorize("hasAnyAuthority('system:user:all', 'system:user:add', 'system:user:modify')") + public ResponseResult> getAllUser() { List users = userService.getAllUser(); return ResponseResult.databaseSelectSuccess(users); } @GetMapping("/{id}") - public ResponseResult getUser(@PathVariable Long id) { + @PreAuthorize("hasAuthority('system:user:one')") + public ResponseResult getUser(@PathVariable Long id) { User user = userService.getUser(id); return ResponseResult.databaseSelectSuccess(user); } @PostMapping - public ResponseResult addUser(@RequestBody User user) { + @PreAuthorize("hasAuthority('system:user:add')") + public ResponseResult addUser(@RequestBody User user) { if (!StringUtils.hasText(user.getUsername())) { return ResponseResult.build(ResponseCode.DATABASE_SAVE_ERROR, "Username cannot be empty", null); } @@ -59,7 +61,8 @@ public class UserController { } @DeleteMapping("/{id}") - public ResponseResult deleteUser(@PathVariable Long id) { + @PreAuthorize("hasAuthority('system:user:delete')") + public ResponseResult deleteUser(@PathVariable Long id) { if (id == 1L) { return ResponseResult.build(ResponseCode.DATABASE_DELETE_ERROR, "Unable to remove super admin", null); } @@ -73,7 +76,8 @@ public class UserController { } @PutMapping() - public ResponseResult modifyUser(@RequestBody User user) { + @PreAuthorize("hasAuthority('system:user:modify')") + public ResponseResult modifyUser(@RequestBody User user) { if (!StringUtils.hasText(user.getUsername())) { return ResponseResult.build(ResponseCode.DATABASE_UPDATE_ERROR, "Username cannot be empty", null); } diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserGroupController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserGroupController.java deleted file mode 100644 index 7a3c16c..0000000 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserGroupController.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.cfive.pinnacle.controller; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 中间表-用户-用户组 前端控制器 - *

- * - * @author FatttSnake - * @since 2023-04-30 - */ -@RestController -@RequestMapping("/userGroup") -public class UserGroupController { - -} diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserRoleController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserRoleController.java deleted file mode 100644 index 78774ae..0000000 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/UserRoleController.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.cfive.pinnacle.controller; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 中间表-用户-角色 前端控制器 - *

- * - * @author FatttSnake - * @since 2023-04-30 - */ -@RestController -@RequestMapping("/userRole") -public class UserRoleController { - -} diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/PowerController.java b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/PowerController.java index 1dc88c9..e88622d 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/PowerController.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/controller/permission/PowerController.java @@ -3,7 +3,10 @@ package com.cfive.pinnacle.controller.permission; import com.cfive.pinnacle.entity.common.ResponseResult; import com.cfive.pinnacle.entity.permission.PowerSet; import com.cfive.pinnacle.service.permission.IPowerService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -16,6 +19,7 @@ import org.springframework.web.bind.annotation.RestController; * @author FatttSnake * @since 2023-04-30 */ +@Tag(name = "权限", description = "权限相关接口") @RestController @RequestMapping("/power") public class PowerController { @@ -26,8 +30,10 @@ public class PowerController { this.powerService = powerService; } + @Operation(summary = "获取所有权限") @GetMapping - public ResponseResult getAllPower() { + @PreAuthorize("hasAnyAuthority('system:role:add', 'system:role:modify')") + public ResponseResult getAllPower() { PowerSet powerSet = powerService.getAllPower(); return ResponseResult.databaseSelectSuccess(powerSet); diff --git a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/common/ResponseResult.java b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/common/ResponseResult.java index 53587ca..d5a7c23 100644 --- a/Pinnacle/src/main/java/com/cfive/pinnacle/entity/common/ResponseResult.java +++ b/Pinnacle/src/main/java/com/cfive/pinnacle/entity/common/ResponseResult.java @@ -1,5 +1,6 @@ package com.cfive.pinnacle.entity.common; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; @@ -11,64 +12,68 @@ import java.io.Serializable; @Data @NoArgsConstructor(access = AccessLevel.PRIVATE) @AllArgsConstructor(access = AccessLevel.PRIVATE) -public class ResponseResult implements Serializable { +@Schema(title = "ResponseResult",description = "响应结果") +public class ResponseResult implements Serializable { @Serial private static final long serialVersionUID = 1L; + @Schema(description = "响应码") private int code; + @Schema(description = "响应信息") private String msg; - private Object data; + @Schema(description = "响应数据") + private T data; - public static ResponseResult build(int code, String msg, Object data) { - return new ResponseResult(code, msg, data); + public static ResponseResult build(int code, String msg, T data) { + return new ResponseResult<>(code, msg, data); } - public static ResponseResult success() { + public static ResponseResult success() { return success(null); } - public static ResponseResult success(String msg) { + public static ResponseResult success(String msg) { return success(msg, null); } - public static ResponseResult success(Object data) { + public static ResponseResult success(T data) { return success("success", data); } - public static ResponseResult success(String msg, Object data) { + public static ResponseResult success(String msg, T data) { return build(ResponseCode.SYSTEM_OK, msg, data); } - public static ResponseResult fail() { + public static ResponseResult fail() { return fail(null); } - public static ResponseResult fail(String msg) { + public static ResponseResult fail(String msg) { return fail(msg, null); } - public static ResponseResult fail(Object data) { + public static ResponseResult fail(T data) { return fail("error", data); } - public static ResponseResult fail(String msg, Object data) { + public static ResponseResult fail(String msg, T data) { return build(ResponseCode.SYSTEM_ERROR, msg, data); } - public static ResponseResult databaseSelectSuccess(Object object) { + public static ResponseResult databaseSelectSuccess(T object) { return build(ResponseCode.DATABASE_SELECT_OK, "success", object); } - public static ResponseResult databaseSaveSuccess(Object object) { + public static ResponseResult databaseSaveSuccess(T object) { return build(ResponseCode.DATABASE_SAVE_OK, "success", object); } - public static ResponseResult databaseUpdateSuccess(Object object) { + public static ResponseResult databaseUpdateSuccess(T object) { return build(ResponseCode.DATABASE_UPDATE_OK, "success", object); } - public static ResponseResult databaseDeleteSuccess() { + public static ResponseResult databaseDeleteSuccess() { return build(ResponseCode.DATABASE_DELETE_OK, "success", null); } }