fix: kick realtime sessions on admin account ban

This commit is contained in:
hy001 2026-05-14 17:07:58 +08:00
parent 04097e530e
commit bbc4a267be

View File

@ -69,6 +69,7 @@ public class UserDataViolationServiceImpl implements UserDataViolationService {
}*/ }*/
public void processUpdateAccountStatus(ApprovalAccountCmd param) { public void processUpdateAccountStatus(ApprovalAccountCmd param) {
boolean realtimeKicked = false;
// 警告 // 警告
if (ConsoleAccountStatusEnum.WARNING.eq(param.getAccountStatusEnum())) { if (ConsoleAccountStatusEnum.WARNING.eq(param.getAccountStatusEnum())) {
@ -112,8 +113,8 @@ public class UserDataViolationServiceImpl implements UserDataViolationService {
redisService redisService
.delete(SecurityConstant.getAccessTokenCacheKeyMd5(param.getBeApprovalUserId())); .delete(SecurityConstant.getAccessTokenCacheKeyMd5(param.getBeApprovalUserId()));
imAccountClient.kick(param.getBeApprovalUserId()); kickUserAndRemoveAuthToken(param.getBeApprovalUserId());
authClient.removeToken(param.getBeApprovalUserId()); realtimeKicked = true;
} }
// 封禁+设备 // 封禁+设备
else if (ConsoleAccountStatusEnum.ARCHIVE_DEVICE.eq(param.getAccountStatusEnum())) { else if (ConsoleAccountStatusEnum.ARCHIVE_DEVICE.eq(param.getAccountStatusEnum())) {
@ -137,8 +138,7 @@ public class UserDataViolationServiceImpl implements UserDataViolationService {
redisService redisService
.delete(SecurityConstant.getAccessTokenCacheKeyMd5(relationUser.getUserId())); .delete(SecurityConstant.getAccessTokenCacheKeyMd5(relationUser.getUserId()));
imAccountClient.kick(relationUser.getUserId()); kickUserAndRemoveAuthToken(relationUser.getUserId());
authClient.removeToken(relationUser.getUserId());
ResponseAssert.requiredSuccess(newsletterClient.send( ResponseAssert.requiredSuccess(newsletterClient.send(
new NewsletterResultCmd() new NewsletterResultCmd()
.setUserIds(List.of(relationUser.getUserId())) .setUserIds(List.of(relationUser.getUserId()))
@ -215,7 +215,9 @@ public class UserDataViolationServiceImpl implements UserDataViolationService {
return; return;
} }
removeTrtcRoom(param); if (!realtimeKicked) {
removeTrtcRoom(param.getBeApprovalUserId());
}
addLog(param, param.getBeApprovalUserId()); addLog(param, param.getBeApprovalUserId());
@ -223,9 +225,15 @@ public class UserDataViolationServiceImpl implements UserDataViolationService {
} }
private void removeTrtcRoom(ApprovalAccountCmd param) { private void kickUserAndRemoveAuthToken(Long userId) {
imAccountClient.kick(userId);
authClient.removeToken(userId);
removeTrtcRoom(userId);
}
private void removeTrtcRoom(Long userId) {
String sessionId = ResponseAssert.requiredSuccess( String sessionId = ResponseAssert.requiredSuccess(
userOnlineClient.getSessionId(param.getBeApprovalUserId())); userOnlineClient.getSessionId(userId));
if (Objects.nonNull(sessionId)) { if (Objects.nonNull(sessionId)) {
RoomProfileDTO roomProfile = ResponseAssert.requiredSuccess( RoomProfileDTO roomProfile = ResponseAssert.requiredSuccess(
roomManagerClient.getProfileById(Long.valueOf(sessionId))); roomManagerClient.getProfileById(Long.valueOf(sessionId)));
@ -233,7 +241,7 @@ public class UserDataViolationServiceImpl implements UserDataViolationService {
trtcClient.removeUser( trtcClient.removeUser(
new TrtcRemoveUserCmd() new TrtcRemoveUserCmd()
.setRoomId(Long.parseLong(roomProfile.getRoomAccount())) .setRoomId(Long.parseLong(roomProfile.getRoomAccount()))
.setUserIds(List.of(param.getBeApprovalUserId())) .setUserIds(List.of(userId))
); );
} }
} }