新增管理员权限查询接口

This commit is contained in:
tianfeng 2025-11-28 12:34:55 +08:00
parent 3bf88ff06b
commit f83883bf7d
5 changed files with 139 additions and 0 deletions

View File

@ -1,6 +1,7 @@
package com.red.circle.other.adapter.app;
import com.red.circle.common.business.dto.cmd.AppExtCommand;
import com.red.circle.other.app.dto.clientobject.BdPermissionCO;
import com.red.circle.other.app.dto.clientobject.BdTeamMemberDetailCO;
import com.red.circle.other.app.dto.clientobject.BdTeamOverviewCO;
import com.red.circle.other.app.dto.clientobject.BdTeamSummaryCO;
@ -62,4 +63,15 @@ public class BdTeamRestController {
public BdTeamSummaryCO queryTeamSummary(AppExtCommand cmd) {
return bdTeamService.queryTeamSummary(cmd.getReqUserId());
}
/**
* 检查BD权限
* <p>
* 返回用户是否有User Editing和Room Editing权限以及具体的权限列表
* </p>
*/
@PostMapping("/permission/check")
public BdPermissionCO checkPermission(AppExtCommand cmd) {
return bdTeamService.checkPermission(cmd.getReqUserId());
}
}

View File

@ -0,0 +1,80 @@
package com.red.circle.other.app.command.bd.query;
import com.red.circle.other.app.dto.clientobject.BdPermissionCO;
import com.red.circle.other.app.enums.violation.ViolationTypeEnum;
import com.red.circle.other.infra.database.rds.service.sys.AdministratorAuthService;
import com.red.circle.other.infra.database.rds.service.sys.AdministratorService;
import com.red.circle.tool.core.collection.CollectionUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* BD权限检查执行器
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class BdPermissionCheckQryExe {
private final AdministratorService administratorService;
private final AdministratorAuthService administratorAuthService;
/**
* 执行权限检查
*/
public BdPermissionCO execute(Long userId) {
BdPermissionCO result = new BdPermissionCO();
// 检查是否是管理员
boolean isAdmin = administratorService.existsAdmin(userId);
if (!isAdmin) {
// 不是管理员没有任何权限
result.setHasUserEditingPermission(false);
result.setHasRoomEditingPermission(false);
result.setPermissions(List.of());
return result;
}
// 获取用户的所有权限
List<String> allAuthResources = administratorAuthService.listAuthResources(userId);
if (CollectionUtils.isEmpty(allAuthResources)) {
result.setHasUserEditingPermission(false);
result.setHasRoomEditingPermission(false);
result.setPermissions(List.of());
return result;
}
// 过滤出属于 ViolationTypeEnum 的权限
Set<String> validViolationTypes = Arrays.stream(ViolationTypeEnum.values())
.map(Enum::name)
.collect(Collectors.toSet());
List<String> userPermissions = allAuthResources.stream()
.filter(validViolationTypes::contains)
.collect(Collectors.toList());
result.setPermissions(userPermissions);
// 检查 User Editing 权限USER_NICKNAME | USER_AVATAR
boolean hasUserEditingPermission = userPermissions.contains(ViolationTypeEnum.USER_NICKNAME.name())
|| userPermissions.contains(ViolationTypeEnum.USER_AVATAR.name());
result.setHasUserEditingPermission(hasUserEditingPermission);
// 检查 Room Editing 权限ROOM_NICKNAME | ROOM_COVER | ROOM_NOTICE | ROOM_THEME
boolean hasRoomEditingPermission = userPermissions.contains(ViolationTypeEnum.ROOM_NICKNAME.name())
|| userPermissions.contains(ViolationTypeEnum.ROOM_COVER.name())
|| userPermissions.contains(ViolationTypeEnum.ROOM_NOTICE.name())
|| userPermissions.contains(ViolationTypeEnum.ROOM_THEME.name());
result.setHasRoomEditingPermission(hasRoomEditingPermission);
return result;
}
}

View File

@ -1,8 +1,10 @@
package com.red.circle.other.app.service;
import com.red.circle.other.app.command.bd.query.BdPermissionCheckQryExe;
import com.red.circle.other.app.command.bd.query.BdTeamMemberDetailQryExe;
import com.red.circle.other.app.command.bd.query.BdTeamQryExe;
import com.red.circle.other.app.command.bd.query.BdTeamSummaryQryExe;
import com.red.circle.other.app.dto.clientobject.BdPermissionCO;
import com.red.circle.other.app.dto.clientobject.BdTeamMemberDetailCO;
import com.red.circle.other.app.dto.clientobject.BdTeamOverviewCO;
import com.red.circle.other.app.dto.clientobject.BdTeamSummaryCO;
@ -23,6 +25,7 @@ public class BdTeamServiceImpl implements BdTeamService {
private final BdTeamQryExe bdTeamQryExe;
private final BdTeamMemberDetailQryExe bdTeamMemberDetailQryExe;
private final BdTeamSummaryQryExe bdTeamSummaryQryExe;
private final BdPermissionCheckQryExe bdPermissionCheckQryExe;
@Override
public BdTeamOverviewCO queryTeamOverview(BdTeamQueryCmd cmd) {
@ -38,4 +41,9 @@ public class BdTeamServiceImpl implements BdTeamService {
public BdTeamSummaryCO queryTeamSummary(Long userId) {
return bdTeamSummaryQryExe.execute(userId);
}
@Override
public BdPermissionCO checkPermission(Long userId) {
return bdPermissionCheckQryExe.execute(userId);
}
}

View File

@ -0,0 +1,27 @@
package com.red.circle.other.app.dto.clientobject;
import lombok.Data;
import java.util.List;
/**
* BD权限检查结果
*/
@Data
public class BdPermissionCO {
/**
* 是否有 User Editing 权限
*/
private Boolean hasUserEditingPermission;
/**
* 是否有 Room Editing 权限
*/
private Boolean hasRoomEditingPermission;
/**
* 用户拥有的权限列表ViolationTypeEnum
*/
private List<String> permissions;
}

View File

@ -1,5 +1,6 @@
package com.red.circle.other.app.service;
import com.red.circle.other.app.dto.clientobject.BdPermissionCO;
import com.red.circle.other.app.dto.clientobject.BdTeamMemberDetailCO;
import com.red.circle.other.app.dto.clientobject.BdTeamOverviewCO;
import com.red.circle.other.app.dto.clientobject.BdTeamSummaryCO;
@ -45,4 +46,15 @@ public interface BdTeamService {
* @return 团队总览
*/
BdTeamSummaryCO queryTeamSummary(Long userId);
/**
* 检查BD权限
* <p>
* 返回用户是否有User Editing和Room Editing权限
* </p>
*
* @param userId 用户ID
* @return 权限检查结果
*/
BdPermissionCO checkPermission(Long userId);
}