diff --git a/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java b/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java index da08a31..c3dc145 100644 --- a/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java +++ b/backend/src/main/java/com/zl/mjga/controller/IdentityAccessController.java @@ -15,7 +15,6 @@ import com.zl.mjga.repository.UserRepository; import com.zl.mjga.service.IdentityAccessService; import io.minio.MinioClient; import io.minio.PutObjectArgs; -import io.minio.errors.*; import jakarta.validation.Valid; import java.awt.image.BufferedImage; import java.security.Principal; @@ -118,7 +117,7 @@ public class IdentityAccessController { @PreAuthorize("hasAuthority(T(com.zl.mjga.model.urp.EPermission).WRITE_USER_ROLE_PERMISSION)") @GetMapping("/role") - RoleDto queryRoleWithPermission(@RequestParam Long roleId) { + RoleRespDto queryRoleWithPermission(@RequestParam Long roleId) { return identityAccessService.queryUniqueRoleWithPermission(roleId); } @@ -145,7 +144,7 @@ public class IdentityAccessController { @PreAuthorize("hasAuthority(T(com.zl.mjga.model.urp.EPermission).READ_USER_ROLE_PERMISSION)") @GetMapping("/roles") @ResponseStatus(HttpStatus.OK) - PageResponseDto> queryRoles( + PageResponseDto> queryRoles( @ModelAttribute PageRequestDto pageRequestDto, @ModelAttribute RoleQueryDto roleQueryDto) { return identityAccessService.pageQueryRole(pageRequestDto, roleQueryDto); } diff --git a/backend/src/main/java/com/zl/mjga/dto/urp/PermissionRespDto.java b/backend/src/main/java/com/zl/mjga/dto/urp/PermissionRespDto.java index b206b81..256cc92 100644 --- a/backend/src/main/java/com/zl/mjga/dto/urp/PermissionRespDto.java +++ b/backend/src/main/java/com/zl/mjga/dto/urp/PermissionRespDto.java @@ -1,5 +1,6 @@ package com.zl.mjga.dto.urp; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @AllArgsConstructor @@ -7,8 +8,16 @@ import lombok.*; @Data @Builder public class PermissionRespDto { + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private Long id; + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String code; + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String name; + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private Boolean isBound; } diff --git a/backend/src/main/java/com/zl/mjga/dto/urp/RoleDto.java b/backend/src/main/java/com/zl/mjga/dto/urp/RoleRespDto.java similarity index 51% rename from backend/src/main/java/com/zl/mjga/dto/urp/RoleDto.java rename to backend/src/main/java/com/zl/mjga/dto/urp/RoleRespDto.java index 93e7dd7..7d66150 100644 --- a/backend/src/main/java/com/zl/mjga/dto/urp/RoleDto.java +++ b/backend/src/main/java/com/zl/mjga/dto/urp/RoleRespDto.java @@ -1,5 +1,6 @@ package com.zl.mjga.dto.urp; +import io.swagger.v3.oas.annotations.media.Schema; import java.util.LinkedList; import java.util.List; import lombok.*; @@ -8,10 +9,18 @@ import lombok.*; @NoArgsConstructor @Data @Builder -public class RoleDto { +public class RoleRespDto { + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private Long id; + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String code; + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String name; + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private Boolean isBound; + @Builder.Default List permissions = new LinkedList<>(); } diff --git a/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java b/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java index fc0a2f9..7ad468e 100644 --- a/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java +++ b/backend/src/main/java/com/zl/mjga/dto/urp/UserRolePermissionDto.java @@ -1,6 +1,7 @@ package com.zl.mjga.dto.urp; import com.fasterxml.jackson.annotation.JsonProperty; +import io.swagger.v3.oas.annotations.media.Schema; import java.time.OffsetDateTime; import java.util.LinkedList; import java.util.List; @@ -13,7 +14,11 @@ import lombok.*; @Data @Builder public class UserRolePermissionDto { + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private Long id; + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private String username; @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) @@ -21,9 +26,12 @@ public class UserRolePermissionDto { private String avatar; + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private Boolean enable; - @Builder.Default private List roles = new LinkedList<>(); + @Builder.Default private List roles = new LinkedList<>(); + + @Schema(requiredMode = Schema.RequiredMode.REQUIRED) private OffsetDateTime createTime; public Set getPermissions() { diff --git a/backend/src/main/java/com/zl/mjga/repository/UserRepository.java b/backend/src/main/java/com/zl/mjga/repository/UserRepository.java index 04312c0..c5308e1 100644 --- a/backend/src/main/java/com/zl/mjga/repository/UserRepository.java +++ b/backend/src/main/java/com/zl/mjga/repository/UserRepository.java @@ -5,7 +5,7 @@ import static org.jooq.impl.DSL.*; import com.zl.mjga.dto.PageRequestDto; import com.zl.mjga.dto.urp.PermissionRespDto; -import com.zl.mjga.dto.urp.RoleDto; +import com.zl.mjga.dto.urp.RoleRespDto; import com.zl.mjga.dto.urp.UserQueryDto; import com.zl.mjga.dto.urp.UserRolePermissionDto; import java.util.List; @@ -102,7 +102,7 @@ public class UserRepository extends UserDao { r -> r.map((record) -> record.into(PermissionRespDto.class))) .as("permissions")) .from(USER.role())) - .convertFrom(r -> r.map((record) -> record.into(RoleDto.class))) + .convertFrom(r -> r.map((record) -> record.into(RoleRespDto.class))) .as("roles")) .from(USER) .where(USER.ID.eq(userId)) diff --git a/backend/src/main/java/com/zl/mjga/service/IdentityAccessService.java b/backend/src/main/java/com/zl/mjga/service/IdentityAccessService.java index 4330c9e..1eaf33e 100644 --- a/backend/src/main/java/com/zl/mjga/service/IdentityAccessService.java +++ b/backend/src/main/java/com/zl/mjga/service/IdentityAccessService.java @@ -80,17 +80,17 @@ public class IdentityAccessService { return userRepository.fetchUniqueUserDtoWithNestedRolePermissionBy(userId); } - public PageResponseDto> pageQueryRole( + public PageResponseDto> pageQueryRole( PageRequestDto pageRequestDto, RoleQueryDto roleQueryDto) { Result roleRecords = roleRepository.pageFetchBy(pageRequestDto, roleQueryDto); if (roleRecords.isEmpty()) { return PageResponseDto.empty(); } - List roleDtoList = + List roleRespDtoList = roleRecords.stream() .map( record -> { - return RoleDto.builder() + return RoleRespDto.builder() .id(record.getValue("id", Long.class)) .code(record.getValue("code", String.class)) .name(record.getValue("name", String.class)) @@ -103,17 +103,17 @@ public class IdentityAccessService { }) .toList(); return new PageResponseDto<>( - roleRecords.get(0).getValue("total_role", Integer.class), roleDtoList); + roleRecords.get(0).getValue("total_role", Integer.class), roleRespDtoList); } - public @Nullable RoleDto queryUniqueRoleWithPermission(Long roleId) { + public @Nullable RoleRespDto queryUniqueRoleWithPermission(Long roleId) { Result roleWithPermissionRecords = roleRepository.fetchUniqueRoleWithPermission(roleId); if (roleWithPermissionRecords.isEmpty()) { return null; } - RoleDto roleDto = createRbacDtoRolePart(roleWithPermissionRecords); - setCurrentRolePermission(roleDto, roleWithPermissionRecords); - return roleDto; + RoleRespDto roleRespDto = createRbacDtoRolePart(roleWithPermissionRecords); + setCurrentRolePermission(roleRespDto, roleWithPermissionRecords); + return roleRespDto; } public PageResponseDto> pageQueryPermission( @@ -199,12 +199,12 @@ public class IdentityAccessService { .toList()); } - private void setCurrentRolePermission(RoleDto roleDto, List roleResult) { + private void setCurrentRolePermission(RoleRespDto roleRespDto, List roleResult) { if (roleResult.get(0).getValue(PERMISSION.ID) != null) { roleResult.forEach( (record) -> { PermissionRespDto permissionRespDto = createRbacDtoPermissionPart(record); - roleDto.getPermissions().add(permissionRespDto); + roleRespDto.getPermissions().add(permissionRespDto); }); } } @@ -217,12 +217,12 @@ public class IdentityAccessService { return permissionRespDto; } - private RoleDto createRbacDtoRolePart(List roleResult) { - RoleDto roleDto = new RoleDto(); - roleDto.setId(roleResult.get(0).getValue(ROLE.ID)); - roleDto.setCode(roleResult.get(0).getValue(ROLE.CODE)); - roleDto.setName(roleResult.get(0).getValue(ROLE.NAME)); - return roleDto; + private RoleRespDto createRbacDtoRolePart(List roleResult) { + RoleRespDto roleRespDto = new RoleRespDto(); + roleRespDto.setId(roleResult.get(0).getValue(ROLE.ID)); + roleRespDto.setCode(roleResult.get(0).getValue(ROLE.CODE)); + roleRespDto.setName(roleResult.get(0).getValue(ROLE.NAME)); + return roleRespDto; } public boolean isRoleDuplicate(String roleCode, String name) { diff --git a/backend/src/test/java/com/zl/mjga/integration/mvc/UserRolePermissionMvcTest.java b/backend/src/test/java/com/zl/mjga/integration/mvc/UserRolePermissionMvcTest.java index 61ad8b5..4bf49df 100644 --- a/backend/src/test/java/com/zl/mjga/integration/mvc/UserRolePermissionMvcTest.java +++ b/backend/src/test/java/com/zl/mjga/integration/mvc/UserRolePermissionMvcTest.java @@ -178,14 +178,14 @@ class UserRolePermissionMvcTest { stubRoleQueryDto.setRoleId(stubRoleId); stubRoleQueryDto.setRoleCode(stubRoleCode); stubRoleQueryDto.setRoleName(stubRoleName); - RoleDto stubRoleDto = new RoleDto(); - stubRoleDto.setId(1L); - stubRoleDto.setName(stubRoleName); - stubRoleDto.setCode(stubRoleCode); - stubRoleDto.setPermissions( + RoleRespDto stubRoleRespDto = new RoleRespDto(); + stubRoleRespDto.setId(1L); + stubRoleRespDto.setName(stubRoleName); + stubRoleRespDto.setCode(stubRoleCode); + stubRoleRespDto.setPermissions( List.of(new PermissionRespDto(1L, "9VWU1nmU89zEVH", "9VWU1nmU89zEVH", false))); when(identityAccessService.pageQueryRole(PageRequestDto.of(1, 5), stubRoleQueryDto)) - .thenReturn(new PageResponseDto<>(1, List.of(stubRoleDto))); + .thenReturn(new PageResponseDto<>(1, List.of(stubRoleRespDto))); mockMvc .perform( diff --git a/backend/src/test/java/com/zl/mjga/unit/UserRolePermissionUnitTest.java b/backend/src/test/java/com/zl/mjga/unit/UserRolePermissionUnitTest.java index eecc127..3aa8061 100644 --- a/backend/src/test/java/com/zl/mjga/unit/UserRolePermissionUnitTest.java +++ b/backend/src/test/java/com/zl/mjga/unit/UserRolePermissionUnitTest.java @@ -112,19 +112,19 @@ class UserRolePermissionUnitTest { DSL.field("total_user", Integer.class)) .values(stubUserId2, stubUserName2, stubUserPassword2, true, null, 2)); UserRolePermissionDto mockUserRolePermissionDto1 = new UserRolePermissionDto(); - RoleDto mockRoleDto = new RoleDto(); - mockRoleDto.setId(stubRoleId); - mockRoleDto.setCode(stubRoleCode); - mockRoleDto.setName(stubRoleName); + RoleRespDto mockRoleRespDto = new RoleRespDto(); + mockRoleRespDto.setId(stubRoleId); + mockRoleRespDto.setCode(stubRoleCode); + mockRoleRespDto.setName(stubRoleName); PermissionRespDto permissionRespDto = new PermissionRespDto(); permissionRespDto.setId(stubPermissionId); permissionRespDto.setCode(stubPermissionCode); permissionRespDto.setName(stubPermissionName); - mockRoleDto.getPermissions().add(permissionRespDto); + mockRoleRespDto.getPermissions().add(permissionRespDto); mockUserRolePermissionDto1.setId(stubUserId1); mockUserRolePermissionDto1.setUsername(stubUserName1); mockUserRolePermissionDto1.setPassword(stubUserPassword1); - mockUserRolePermissionDto1.getRoles().add(mockRoleDto); + mockUserRolePermissionDto1.getRoles().add(mockRoleRespDto); UserRolePermissionDto mockUserRolePermissionDto2 = new UserRolePermissionDto(); mockUserRolePermissionDto2.setId(stubUserId2); @@ -202,7 +202,7 @@ class UserRolePermissionUnitTest { mockResult.setId(stubRoleId); mockResult.setRoles( List.of( - new RoleDto( + new RoleRespDto( stubRoleId, stubRoleName, stubRoleCode, @@ -245,12 +245,12 @@ class UserRolePermissionUnitTest { when(roleRepository.pageFetchBy(any(PageRequestDto.class), any(RoleQueryDto.class))) .thenReturn(mockRoleResult); RoleQueryDto roleQueryDto = new RoleQueryDto(); - PageResponseDto> pageResult = + PageResponseDto> pageResult = identityAccessService.pageQueryRole(PageRequestDto.of(1, 5), roleQueryDto); assertThat(pageResult.getTotal()).isEqualTo(0L); roleQueryDto.setUserId(1L); - PageResponseDto> pageResult2 = + PageResponseDto> pageResult2 = identityAccessService.pageQueryRole(PageRequestDto.of(1, 5), roleQueryDto); assertThat(pageResult2.getTotal()).isEqualTo(0L); } diff --git a/frontend/src/api/schema/openapi.json b/frontend/src/api/schema/openapi.json index 867fa18..0f65e1a 100644 --- a/frontend/src/api/schema/openapi.json +++ b/frontend/src/api/schema/openapi.json @@ -289,7 +289,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/RoleDto" + "$ref": "#/components/schemas/RoleRespDto" } } } @@ -1031,7 +1031,7 @@ "content": { "*/*": { "schema": { - "$ref": "#/components/schemas/PageResponseDtoListRoleDto" + "$ref": "#/components/schemas/PageResponseDtoListRoleRespDto" } } } @@ -1718,6 +1718,12 @@ } }, "PermissionRespDto": { + "required": [ + "code", + "id", + "isBound", + "name" + ], "type": "object", "properties": { "id": { @@ -1735,7 +1741,13 @@ } } }, - "RoleDto": { + "RoleRespDto": { + "required": [ + "code", + "id", + "isBound", + "name" + ], "type": "object", "properties": { "id": { @@ -1760,6 +1772,12 @@ } }, "UserRolePermissionDto": { + "required": [ + "createTime", + "enable", + "id", + "username" + ], "type": "object", "properties": { "id": { @@ -1782,7 +1800,7 @@ "roles": { "type": "array", "items": { - "$ref": "#/components/schemas/RoleDto" + "$ref": "#/components/schemas/RoleRespDto" } }, "createTime": { @@ -1832,7 +1850,7 @@ } } }, - "PageResponseDtoListRoleDto": { + "PageResponseDtoListRoleRespDto": { "type": "object", "properties": { "total": { @@ -1842,7 +1860,7 @@ "data": { "type": "array", "items": { - "$ref": "#/components/schemas/RoleDto" + "$ref": "#/components/schemas/RoleRespDto" } } } diff --git a/frontend/src/api/types/schema.d.ts b/frontend/src/api/types/schema.d.ts index 00654be..7343ffb 100644 --- a/frontend/src/api/types/schema.d.ts +++ b/frontend/src/api/types/schema.d.ts @@ -779,29 +779,29 @@ export interface components { }; PermissionRespDto: { /** Format: int64 */ - id?: number; - code?: string; - name?: string; - isBound?: boolean; + id: number; + code: string; + name: string; + isBound: boolean; }; - RoleDto: { + RoleRespDto: { /** Format: int64 */ - id?: number; - code?: string; - name?: string; - isBound?: boolean; + id: number; + code: string; + name: string; + isBound: boolean; permissions?: components["schemas"]["PermissionRespDto"][]; }; UserRolePermissionDto: { /** Format: int64 */ - id?: number; - username?: string; + id: number; + username: string; password?: string; avatar?: string; - enable?: boolean; - roles?: components["schemas"]["RoleDto"][]; + enable: boolean; + roles?: components["schemas"]["RoleRespDto"][]; /** Format: date-time */ - createTime?: string; + createTime: string; permissions?: components["schemas"]["PermissionRespDto"][]; }; RoleQueryDto: { @@ -815,10 +815,10 @@ export interface components { /** @enum {string} */ bindState?: "BIND" | "UNBIND" | "ALL"; }; - PageResponseDtoListRoleDto: { + PageResponseDtoListRoleRespDto: { /** Format: int64 */ total?: number; - data?: components["schemas"]["RoleDto"][]; + data?: components["schemas"]["RoleRespDto"][]; }; PermissionQueryDto: { /** Format: int64 */ @@ -1113,7 +1113,7 @@ export interface operations { [name: string]: unknown; }; content: { - "*/*": components["schemas"]["RoleDto"]; + "*/*": components["schemas"]["RoleRespDto"]; }; }; }; @@ -1750,7 +1750,7 @@ export interface operations { [name: string]: unknown; }; content: { - "*/*": components["schemas"]["PageResponseDtoListRoleDto"]; + "*/*": components["schemas"]["PageResponseDtoListRoleRespDto"]; }; }; }; diff --git a/frontend/src/components/Avatar.vue b/frontend/src/components/Avatar.vue index c3b0776..56b7bf3 100644 --- a/frontend/src/components/Avatar.vue +++ b/frontend/src/components/Avatar.vue @@ -10,10 +10,10 @@ import { getUserAvatarUrl } from "@/utils/avatarUtil"; import { computed } from "vue"; -const { - src = "", - alt = "用户头像", - size = "md" +const { + src = "", + alt = "用户头像", + size = "md", } = defineProps<{ src?: string; alt?: string; @@ -37,7 +37,7 @@ const processedSrc = computed(() => { } if (src === "/trump.jpg") { return src; - } + } return getUserAvatarUrl(src); }); diff --git a/frontend/src/components/Breadcrumbs.vue b/frontend/src/components/Breadcrumbs.vue index e604fa5..97db76b 100644 --- a/frontend/src/components/Breadcrumbs.vue +++ b/frontend/src/components/Breadcrumbs.vue @@ -2,7 +2,7 @@