fix: refresh overseas authorization on user status change
This commit is contained in:
@@ -170,6 +170,8 @@ public class MemberService {
|
|||||||
membership.setLeftAt("DISABLED".equals(request.status()) ? LocalDateTime.now() : null);
|
membership.setLeftAt("DISABLED".equals(request.status()) ? LocalDateTime.now() : null);
|
||||||
user.setStatus(request.status()); repository.saveUser(user); repository.save(membership);
|
user.setStatus(request.status()); repository.saveUser(user); repository.save(membership);
|
||||||
securityEvents.userStatus(user.getAuthUserId(), tenantId, "MERCHANT", request.status());
|
securityEvents.userStatus(user.getAuthUserId(), tenantId, "MERCHANT", request.status());
|
||||||
|
securityEvents.permissionChanged(user.getAuthUserId(), tenantId, "MERCHANT",
|
||||||
|
"MEMBER_STATUS_CHANGED");
|
||||||
} catch (RuntimeException localFailure) {
|
} catch (RuntimeException localFailure) {
|
||||||
try {
|
try {
|
||||||
authClient.status(internalToken, user.getAuthUserId(), new AuthAccountClient.StatusRequest(oldStatus));
|
authClient.status(internalToken, user.getAuthUserId(), new AuthAccountClient.StatusRequest(oldStatus));
|
||||||
|
|||||||
@@ -147,6 +147,8 @@ public class PlatformInternalUserService {
|
|||||||
repository.saveUser(user);
|
repository.saveUser(user);
|
||||||
repository.save(membership);
|
repository.save(membership);
|
||||||
securityEvents.userStatus(user.getAuthUserId(), PLATFORM_TENANT_ID, "PLATFORM", request.status());
|
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);
|
return response(membership, user, authAccount.username(), roleIds);
|
||||||
} catch (RuntimeException localFailure) {
|
} catch (RuntimeException localFailure) {
|
||||||
compensateStatus(user.getAuthUserId(), authAccount.status(), localFailure);
|
compensateStatus(user.getAuthUserId(), authAccount.status(), localFailure);
|
||||||
|
|||||||
@@ -203,6 +203,8 @@ public class PlatformUserManagementService {
|
|||||||
members.save(membership);
|
members.save(membership);
|
||||||
securityEvents.userStatus(user.getAuthUserId(), membership.getTenantId(),
|
securityEvents.userStatus(user.getAuthUserId(), membership.getTenantId(),
|
||||||
appCode(membership.getTenantId()), request.status());
|
appCode(membership.getTenantId()), request.status());
|
||||||
|
securityEvents.permissionChanged(user.getAuthUserId(), membership.getTenantId(),
|
||||||
|
appCode(membership.getTenantId()), "PLATFORM_USER_STATUS_CHANGED");
|
||||||
} catch (RuntimeException localFailure) {
|
} catch (RuntimeException localFailure) {
|
||||||
call(() -> authClient.status(internalToken, user.getAuthUserId(),
|
call(() -> authClient.status(internalToken, user.getAuthUserId(),
|
||||||
new AuthAccountClient.StatusRequest(oldAccount.status())));
|
new AuthAccountClient.StatusRequest(oldAccount.status())));
|
||||||
|
|||||||
@@ -106,6 +106,8 @@ class MemberServiceTest {
|
|||||||
assertEquals("DISABLED", result.status());
|
assertEquals("DISABLED", result.status());
|
||||||
verify(repository).save(member);
|
verify(repository).save(member);
|
||||||
verify(repository).saveUser(user);
|
verify(repository).saveUser(user);
|
||||||
|
verify(securityEvents).userStatus(40L, 100L, "MERCHANT", "DISABLED");
|
||||||
|
verify(securityEvents).permissionChanged(40L, 100L, "MERCHANT", "MEMBER_STATUS_CHANGED");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test void shouldHandleCase05() {
|
@Test void shouldHandleCase05() {
|
||||||
|
|||||||
@@ -142,6 +142,19 @@ class PlatformInternalUserServiceTest {
|
|||||||
verify(auth, never()).status(anyString(), anyLong(), any());
|
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
|
@Test
|
||||||
void shouldHandleCase05() {
|
void shouldHandleCase05() {
|
||||||
when(auth.status(anyString(), eq(10L), any())).thenReturn(ApiResponse.success(null));
|
when(auth.status(anyString(), eq(10L), any())).thenReturn(ApiResponse.success(null));
|
||||||
|
|||||||
@@ -224,6 +224,20 @@ class PlatformUserManagementServiceTest {
|
|||||||
verify(auth, never()).status(anyString(), anyLong(), any());
|
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
|
@Test
|
||||||
void builtInPlatformAdministratorCannotBeDisabled() {
|
void builtInPlatformAdministratorCannotBeDisabled() {
|
||||||
IamRole platformAdmin = new IamRole();
|
IamRole platformAdmin = new IamRole();
|
||||||
|
|||||||
Reference in New Issue
Block a user