From b38844b82e5ff23088872bfc072ad0736385a25b Mon Sep 17 00:00:00 2001 From: wzp Date: Wed, 25 Dec 2024 17:58:51 +0800 Subject: [PATCH] feat: add remove user from club controller --- .../blue/club/controller/ClubController.java | 12 ++++++ .../club/req/ClubChangeUserAuthRequest.java | 7 ++++ .../org/blue/club/services/ClubServices.java | 41 ++++++++++++++++++- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/blue/club/entities/dto/club/req/ClubChangeUserAuthRequest.java diff --git a/src/main/java/org/blue/club/controller/ClubController.java b/src/main/java/org/blue/club/controller/ClubController.java index 265053d..aa00556 100644 --- a/src/main/java/org/blue/club/controller/ClubController.java +++ b/src/main/java/org/blue/club/controller/ClubController.java @@ -8,6 +8,7 @@ import org.blue.club.annotation.Auth; import org.blue.club.annotation.DescriptionType; import org.blue.club.annotation.PermissionDescription; import org.blue.club.entities.dto.club.req.ClubAddUserRequest; +import org.blue.club.entities.dto.club.req.ClubChangeUserAuthRequest; import org.blue.club.entities.dto.club.req.CreateClubRequest; import org.blue.club.entities.dto.user.User; import org.blue.club.entities.vo.data.ClubVo; @@ -47,4 +48,15 @@ public class ClubController { public Result> clubGetUsers(@Schema(description = "分页数据第几页") @RequestParam Integer page, @Schema(description = "分页数据每页数据量") @RequestParam Integer num, @Schema(description = "社团ID") @RequestParam Long clubId) { return clubServices.clubGetUsers(page, num, clubId); } + + @Operation(description = "从社团中删除用户") + @DeleteMapping("/user/remove") + public Result clubRemoveUser(@Auth(permissions = {@PermissionDescription(3), @PermissionDescription(value = 2, type = DescriptionType.CLUB)}) User user, @Schema(description = "社团ID") @RequestParam long clubId, @Schema(description = "需要删除的用户ID") @RequestParam long userId) { + return clubServices.clubRemoveUser(user, clubId, userId); + } + @Operation(description = "修改社团用户权限") + @PutMapping("/user/auth") + public Result clubChangeUserAuth(@Auth(permissions = {@PermissionDescription(3), @PermissionDescription(value = 2, type = DescriptionType.CLUB)}) User user, @RequestBody ClubChangeUserAuthRequest request) { + return clubServices.clubChangeUserAuth(user, request); + } } diff --git a/src/main/java/org/blue/club/entities/dto/club/req/ClubChangeUserAuthRequest.java b/src/main/java/org/blue/club/entities/dto/club/req/ClubChangeUserAuthRequest.java new file mode 100644 index 0000000..039c598 --- /dev/null +++ b/src/main/java/org/blue/club/entities/dto/club/req/ClubChangeUserAuthRequest.java @@ -0,0 +1,7 @@ +package org.blue.club.entities.dto.club.req; + +import io.swagger.v3.oas.annotations.media.Schema; + +@Schema(name = "修改社团用户权限组请求体") +public record ClubChangeUserAuthRequest(@Schema(description = "修改的用户ID") Long userId,@Schema(description = "社团ID") Long clubId,@Schema(description = "新的AuthID") Long newAuthId) { +} diff --git a/src/main/java/org/blue/club/services/ClubServices.java b/src/main/java/org/blue/club/services/ClubServices.java index f99cfc3..6933ab7 100644 --- a/src/main/java/org/blue/club/services/ClubServices.java +++ b/src/main/java/org/blue/club/services/ClubServices.java @@ -8,8 +8,10 @@ import org.blue.club.dao.ClubDao; import org.blue.club.dao.ClubUserAuthDao; import org.blue.club.dao.UserDao; import org.blue.club.entities.dto.club.req.ClubAddUserRequest; +import org.blue.club.entities.dto.club.req.ClubChangeUserAuthRequest; import org.blue.club.entities.dto.club.req.CreateClubRequest; import org.blue.club.entities.dto.user.User; +import org.blue.club.entities.vo.data.ClubAuthVo; import org.blue.club.entities.vo.data.ClubUserAuthVo; import org.blue.club.entities.vo.data.ClubVo; import org.blue.club.entities.vo.data.UserVo; @@ -53,10 +55,18 @@ public class ClubServices { @Transactional public Result clubAddUser(User user, ClubAddUserRequest request) { long requestClubId = request.clubId(); - long userClubId = user.getClub().getId(); + long userClubId = -1; + ClubVo userClub = user.getClub(); + if (userClub != null) { + userClubId = userClub.getId(); + } if (userClubId != requestClubId && !user.hasPermission(3)) throw new AuthorizationException(Result.failed(HttpStatus.FORBIDDEN, "权限不足!")); - long userClubAuthId = user.getClubAuth().getId(); + long userClubAuthId = -1; + ClubAuthVo clubAuth = user.getClubAuth(); + if (clubAuth != null) { + userClubAuthId = clubAuth.getId(); + } long requestClubAuthId = request.clubAuthId(); if (requestClubAuthId >= userClubAuthId && !user.hasPermission(3)) throw new AuthorizationException(Result.failed(HttpStatus.FORBIDDEN, "权限不足!")); @@ -78,4 +88,31 @@ public class ClubServices { List userVos = userDao.selectListWithRelationsByQuery(select(USER_VO.ALL_COLUMNS).from(USER_VO).where(USER_VO.ID.in(paginate.getRecords().stream().map(ClubUserAuthVo::getUserId).toList()))); return Result.success(new PagerData<>(paginate.getTotalRow(), userVos.stream().map(e -> voUtils.vo2DtoSafe(e, User.class)).toList())); } + + public Result clubRemoveUser(User user, long clubId, long userId) { + ClubUserAuthVo clubUserAuthVo = clubUserAuthDao.selectOneByCondition(CLUB_USER_AUTH_VO.USER_ID.eq(userId).and(CLUB_USER_AUTH_VO.CLUB_ID.eq(clubId))); + if (clubUserAuthVo == null) return Result.failed(HttpStatus.NOT_FOUND, "未知用户"); + Long authId = clubUserAuthVo.getAuthId(); + ClubAuthVo clubAuth = user.getClubAuth(); + long clubAuthId = -1; + if (clubAuth != null) { + clubAuthId = clubAuth.getId(); + } + if (clubAuthId <= authId && !user.hasPermission(3)) + throw new AuthorizationException(Result.failed(HttpStatus.FORBIDDEN, "权限不足!")); + clubUserAuthDao.delete(clubUserAuthVo); + return Result.success(true); + } + + public Result clubChangeUserAuth(User user, ClubChangeUserAuthRequest request) { + Long userId = request.userId(); + Long clubId = request.clubId(); + ClubUserAuthVo clubUserAuthVo = clubUserAuthDao.selectOneByCondition(CLUB_USER_AUTH_VO.USER_ID.eq(userId).and(CLUB_USER_AUTH_VO.CLUB_ID.eq(clubId))); + if (clubUserAuthVo == null) return Result.failed(HttpStatus.NOT_FOUND, "未知用户"); + // TODO + // 不能修改原始权限比操作者更高的用户 + // 当目标权限比操作者更高时不允许修改 + + return null; + } }