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