This is an automated email from the ASF dual-hosted git repository.
Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 0a177ae3c4 fix: guard empty deletedIds in PermissionServiceImpl
event listeners (#6868) (#6946)
0a177ae3c4 is described below
commit 0a177ae3c4bade1909912970bad5ae907a9b4f5b
Author: Southern <[email protected]>
AuthorDate: Sun Sep 6 08:06:01 2026 +0800
fix: guard empty deletedIds in PermissionServiceImpl event listeners
(#6868) (#6946)
- Guard onResourcesDeleted and onRoleDeleted with CollectionUtils.isNotEmpty
to avoid rendering invalid `IN ()` SQL for empty deletedIds
- Rename copy-paste misnamed onResourcesCreated(BatchResourceDeletedEvent)
to onResourcesDeleted
- Add unit tests for empty and non-empty deletedIds on both listeners
Co-authored-by: aias00 <[email protected]>
---
.../admin/service/impl/PermissionServiceImpl.java | 12 +++++---
.../admin/service/PermissionServiceTest.java | 36 ++++++++++++++++++++++
2 files changed, 44 insertions(+), 4 deletions(-)
diff --git
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java
index 8ded4a8502..3c5ecec6e7 100644
---
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java
+++
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/PermissionServiceImpl.java
@@ -162,10 +162,12 @@ public class PermissionServiceImpl implements
PermissionService {
* @param event event
*/
@EventListener(BatchResourceDeletedEvent.class)
- public void onResourcesCreated(final BatchResourceDeletedEvent event) {
- permissionMapper.deleteByResourceId(event.getDeletedIds());
+ public void onResourcesDeleted(final BatchResourceDeletedEvent event) {
+ if (CollectionUtils.isNotEmpty(event.getDeletedIds())) {
+ permissionMapper.deleteByResourceId(event.getDeletedIds());
+ }
}
-
+
/**
* listen {@link BatchRoleDeletedEvent} delete permission.
*
@@ -173,7 +175,9 @@ public class PermissionServiceImpl implements
PermissionService {
*/
@EventListener(BatchRoleDeletedEvent.class)
public void onRoleDeleted(final BatchRoleDeletedEvent event) {
- permissionMapper.deleteByObjectIds(event.getDeletedIds());
+ if (CollectionUtils.isNotEmpty(event.getDeletedIds())) {
+ permissionMapper.deleteByObjectIds(event.getDeletedIds());
+ }
}
/**
diff --git
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PermissionServiceTest.java
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PermissionServiceTest.java
index bbb8054469..3fa002eaf5 100644
---
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PermissionServiceTest.java
+++
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/PermissionServiceTest.java
@@ -26,7 +26,10 @@ import org.apache.shenyu.admin.model.custom.UserInfo;
import org.apache.shenyu.admin.model.entity.DashboardUserDO;
import org.apache.shenyu.admin.model.entity.PermissionDO;
import org.apache.shenyu.admin.model.entity.ResourceDO;
+import org.apache.shenyu.admin.model.entity.RoleDO;
import org.apache.shenyu.admin.model.entity.UserRoleDO;
+import org.apache.shenyu.admin.model.event.resource.BatchResourceDeletedEvent;
+import org.apache.shenyu.admin.model.event.role.BatchRoleDeletedEvent;
import org.apache.shenyu.admin.model.vo.PermissionMenuVO;
import org.apache.shenyu.admin.service.impl.PermissionServiceImpl;
import org.apache.shenyu.admin.spring.SpringBeanUtils;
@@ -57,8 +60,11 @@ import java.util.stream.Stream;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static
org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
+import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
@@ -166,4 +172,34 @@ public final class PermissionServiceTest {
final Set<String> result =
permissionServiceImplUnderTest.getAuthPermByUserName("admin");
assertThat(result.size(), is(1));
}
+
+ @Test
+ public void testOnResourcesDeletedEmpty() {
+ final BatchResourceDeletedEvent event = new
BatchResourceDeletedEvent(Collections.emptyList(), "admin");
+ permissionServiceImplUnderTest.onResourcesDeleted(event);
+ verify(mockPermissionMapper, never()).deleteByResourceId(anyList());
+ }
+
+ @Test
+ public void testOnResourcesDeleted() {
+ final ResourceDO resourceDO =
ResourceDO.builder().id("resource-1").build();
+ final BatchResourceDeletedEvent event = new
BatchResourceDeletedEvent(Collections.singletonList(resourceDO), "admin");
+ permissionServiceImplUnderTest.onResourcesDeleted(event);
+
verify(mockPermissionMapper).deleteByResourceId(Collections.singletonList("resource-1"));
+ }
+
+ @Test
+ public void testOnRoleDeletedEmpty() {
+ final BatchRoleDeletedEvent event = new
BatchRoleDeletedEvent(Collections.emptyList(), "admin");
+ permissionServiceImplUnderTest.onRoleDeleted(event);
+ verify(mockPermissionMapper, never()).deleteByObjectIds(anyList());
+ }
+
+ @Test
+ public void testOnRoleDeleted() {
+ final RoleDO roleDO = RoleDO.builder().id("role-1").build();
+ final BatchRoleDeletedEvent event = new
BatchRoleDeletedEvent(Collections.singletonList(roleDO), "admin");
+ permissionServiceImplUnderTest.onRoleDeleted(event);
+
verify(mockPermissionMapper).deleteByObjectIds(Collections.singletonList("role-1"));
+ }
}