fix: refresh overseas authorization on user status change

This commit is contained in:
2026-09-07 14:22:26 +08:00
parent 2c5fda33e7
commit 693e10188c
6 changed files with 35 additions and 0 deletions
@@ -170,6 +170,8 @@ public class MemberService {
membership.setLeftAt("DISABLED".equals(request.status()) ? LocalDateTime.now() : null);
user.setStatus(request.status()); repository.saveUser(user); repository.save(membership);
securityEvents.userStatus(user.getAuthUserId(), tenantId, "MERCHANT", request.status());
securityEvents.permissionChanged(user.getAuthUserId(), tenantId, "MERCHANT",
"MEMBER_STATUS_CHANGED");
} catch (RuntimeException localFailure) {
try {
authClient.status(internalToken, user.getAuthUserId(), new AuthAccountClient.StatusRequest(oldStatus));
@@ -147,6 +147,8 @@ public class PlatformInternalUserService {
repository.saveUser(user);
repository.save(membership);
securityEvents.userStatus(user.getAuthUserId(), PLATFORM_TENANT_ID, "PLATFORM", request.status());
securityEvents.permissionChanged(user.getAuthUserId(), PLATFORM_TENANT_ID, "PLATFORM",
"PLATFORM_INTERNAL_USER_STATUS_CHANGED");
return response(membership, user, authAccount.username(), roleIds);
} catch (RuntimeException localFailure) {
compensateStatus(user.getAuthUserId(), authAccount.status(), localFailure);
@@ -203,6 +203,8 @@ public class PlatformUserManagementService {
members.save(membership);
securityEvents.userStatus(user.getAuthUserId(), membership.getTenantId(),
appCode(membership.getTenantId()), request.status());
securityEvents.permissionChanged(user.getAuthUserId(), membership.getTenantId(),
appCode(membership.getTenantId()), "PLATFORM_USER_STATUS_CHANGED");
} catch (RuntimeException localFailure) {
call(() -> authClient.status(internalToken, user.getAuthUserId(),
new AuthAccountClient.StatusRequest(oldAccount.status())));
@@ -106,6 +106,8 @@ class MemberServiceTest {
assertEquals("DISABLED", result.status());
verify(repository).save(member);
verify(repository).saveUser(user);
verify(securityEvents).userStatus(40L, 100L, "MERCHANT", "DISABLED");
verify(securityEvents).permissionChanged(40L, 100L, "MERCHANT", "MEMBER_STATUS_CHANGED");
}
@Test void shouldHandleCase05() {
@@ -142,6 +142,19 @@ class PlatformInternalUserServiceTest {
verify(auth, never()).status(anyString(), anyLong(), any());
}
@Test
void statusChangePublishesMatchingAuthorizationSnapshot() {
when(auth.status(anyString(), eq(10L), any())).thenReturn(ApiResponse.success(null));
InternalUserResponse result = service.changeStatus(30L,
new ChangeInternalUserStatusRequest("DISABLED"), 99L);
assertEquals("DISABLED", result.status());
verify(securityEvents).userStatus(10L, 0L, "PLATFORM", "DISABLED");
verify(securityEvents).permissionChanged(10L, 0L, "PLATFORM",
"PLATFORM_INTERNAL_USER_STATUS_CHANGED");
}
@Test
void shouldHandleCase05() {
when(auth.status(anyString(), eq(10L), any())).thenReturn(ApiResponse.success(null));
@@ -224,6 +224,20 @@ class PlatformUserManagementServiceTest {
verify(auth, never()).status(anyString(), anyLong(), any());
}
@Test
void statusChangePublishesMatchingAuthorizationSnapshot() {
when(auth.status(anyString(), eq(10L), any())).thenReturn(ApiResponse.success(null));
when(auth.summary("internal-token", 10L)).thenReturn(ApiResponse.success(
new AuthAccountClient.AccountSummary(10L, "operator", "平台运营", "ACTIVE")));
when(members.findRoleIds(0L, 30L)).thenReturn(List.of(40001L));
UserResponse result = service.changeStatus(30L, new ChangeStatusRequest("ACTIVE"), 99L);
assertEquals("ACTIVE", result.status());
verify(securityEvents).userStatus(10L, 0L, "PLATFORM", "ACTIVE");
verify(securityEvents).permissionChanged(10L, 0L, "PLATFORM", "PLATFORM_USER_STATUS_CHANGED");
}
@Test
void builtInPlatformAdministratorCannotBeDisabled() {
IamRole platformAdmin = new IamRole();