feat: add remove user from club controller

This commit is contained in:
wzp 2024-12-25 17:58:51 +08:00
parent 7db7cc895d
commit b38844b82e
3 changed files with 58 additions and 2 deletions

View File

@ -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<PagerData<User>> 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<Boolean> 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<Boolean> clubChangeUserAuth(@Auth(permissions = {@PermissionDescription(3), @PermissionDescription(value = 2, type = DescriptionType.CLUB)}) User user, @RequestBody ClubChangeUserAuthRequest request) {
return clubServices.clubChangeUserAuth(user, request);
}
}

View File

@ -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) {
}

View File

@ -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<Boolean> 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<UserVo> 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<Boolean> 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<Boolean> 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;
}
}