From 3a6ab123b5f87423dd7a93183771c41c54d1903b Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Mon, 1 Dec 2025 15:48:12 +0100 Subject: [PATCH 1/4] [NAE-2288] Delete of process retains global role from user - added filter for global role --- .../application/engine/auth/service/UserServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java index 9820e6296b..842283deb5 100644 --- a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java @@ -544,7 +544,7 @@ public void removeRoleOfDeletedPetriNet(PetriNet petriNet) { public void removeRoleOfDeletedPetriNet(Set petriNetRoles) { String defaultRealmCollection = collectionNameProvider.getDefaultRealmCollection(); Pageable pageable = PageRequest.of(0, paginationProperties.getBackendPageSize()); - Collection roleIds = petriNetRoles.stream().map(ProcessRole::get_id).collect(Collectors.toSet()); + Collection roleIds = petriNetRoles.stream().filter(r -> !r.isGlobal()).map(ProcessRole::get_id).collect(Collectors.toSet()); Page users; do { users = searchUsersByRoleIds(roleIds, defaultRealmCollection, pageable); From ba05893c1f3c12c2c150ca2bfd8432e13ea5294c Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Wed, 3 Dec 2025 12:01:52 +0100 Subject: [PATCH 2/4] Improve null handling, performance, and serialization Added `@JsonIgnore` to prevent `sessionId` serialization. Enhanced null-checking and parameter handling in `NaeReflectionUtils`. Optimized `ActionApiMethods` lookup with a prebuilt map for better performance. --- .../petrinet/service/ProcessRoleService.java | 10 ++++---- .../engine/auth/service/UserServiceImpl.java | 25 ++++++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java index 1c94340d3a..15d54946c3 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java @@ -147,10 +147,10 @@ protected void assignRolesToActor(Collection oldActorRoles, Collect Set rolesNewToUser = getRolesNewToActor(userOldRoles, requestedRoles); Set rolesRemovedFromUser = getRolesRemovedFromActor(userOldRoles, requestedRoles); - String idOfPetriNetContainingRole = getProcessIdRoleBelongsTo(rolesNewToUser, rolesRemovedFromUser); - if (!isGlobalFromFirstRole(rolesNewToUser) && !isGlobalFromFirstRole(rolesRemovedFromUser) && idOfPetriNetContainingRole == null) { - return; - } +// String idOfPetriNetContainingRole = getProcessIdRoleBelongsTo(rolesNewToUser, rolesRemovedFromUser); +// if (!isGlobalFromFirstRole(rolesNewToUser) && !isGlobalFromFirstRole(rolesRemovedFromUser) && idOfPetriNetContainingRole == null) { +// return; +// } oldActorRoles.clear(); oldActorRoles.addAll(updateRequestedRoles(userOldRoles, rolesNewToUser, rolesRemovedFromUser)); @@ -416,7 +416,7 @@ public Page findAllByDefaultName(String name, Pageable pageable) { @Override public void deleteRolesOfNet(PetriNet net, LoggedUser loggedUser) { log.info("[" + net.getStringId() + "]: Initiating deletion of all roles of Petri net " + net.getIdentifier() + " version " + net.getVersion().toString()); - List deletedRoleIds = this.findAllByNetStringId(net.getStringId()).stream().filter(processRole -> processRole.getProcessId() != null).map(ProcessRole::get_id).collect(Collectors.toList()); + List deletedRoleIds = this.findAllByNetStringId(net.getStringId()).stream().filter(processRole -> !processRole.isGlobal()).map(ProcessRole::get_id).collect(Collectors.toList()); Set deletedRoleStringIds = deletedRoleIds.stream().map(ProcessResourceId::toString).collect(Collectors.toSet()); Pageable realmPageable = PageRequest.of(0, paginationProperties.getBackendPageSize()); diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java index 842283deb5..ffcff4f62b 100644 --- a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java @@ -56,6 +56,8 @@ public class UserServiceImpl implements UserService { private AbstractUser systemUser; + private RealmService realmService; + @Getter private PaginationProperties paginationProperties; @@ -112,6 +114,11 @@ public void setPaginationProperties(PaginationProperties paginationProperties) { this.paginationProperties = paginationProperties; } + @Autowired + public void setRealmService(RealmService realmService) { + this.realmService = realmService; + } + @Override public AbstractUser saveUser(AbstractUser user, String realmId) { user.setRealmId(realmId); @@ -542,15 +549,21 @@ public void removeRoleOfDeletedPetriNet(PetriNet petriNet) { @Override public void removeRoleOfDeletedPetriNet(Set petriNetRoles) { - String defaultRealmCollection = collectionNameProvider.getDefaultRealmCollection(); Pageable pageable = PageRequest.of(0, paginationProperties.getBackendPageSize()); Collection roleIds = petriNetRoles.stream().filter(r -> !r.isGlobal()).map(ProcessRole::get_id).collect(Collectors.toSet()); - Page users; + Pageable realmPageable = PageRequest.of(0, paginationProperties.getBackendPageSize()); + Page realms; do { - users = searchUsersByRoleIds(roleIds, defaultRealmCollection, pageable); - users.getContent().forEach(u -> removeRoles(u, petriNetRoles)); - pageable = pageable.next(); - } while (users.hasNext()); + realms = realmService.getSmallRealm(realmPageable); + Page users; + for (Realm realm : realms.getContent()) { + do { + users = searchUsersByRoleIds(roleIds, collectionNameProvider.getCollectionNameForRealm(realm.getName()), pageable); + users.getContent().forEach(u -> removeRoles(u, petriNetRoles)); + pageable = pageable.next(); + } while (users.hasNext()); + } + } while (realms.hasNext()); } @Override From f05b60eec7dfd48c5de6022251308b2c4768d845 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Wed, 3 Dec 2025 13:01:09 +0100 Subject: [PATCH 3/4] [NAE-2288] Delete of process retains global role from user - removed unnecessary method call for removing roles from user - the processRoleService.deleteRolesOfNet does the same thing - added filter for deletable process roles, so global roles will be ignored --- .../application/engine/petrinet/service/PetriNetService.java | 1 - .../application/engine/auth/service/UserServiceImpl.java | 5 +++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java index a468461636..3e7d45cb4b 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetService.java @@ -545,7 +545,6 @@ public void deletePetriNet(String processId, LoggedUser loggedUser, boolean forc PetriNet petriNet = petriNetOptional.get(); log.info("[{}]: Initiating deletion of Petri net {} version {}", processId, petriNet.getIdentifier(), petriNet.getVersion().toString()); - userService.removeRoleOfDeletedPetriNet(petriNet); workflowService.deleteInstancesOfPetriNet(petriNet, force); processRoleService.deleteRolesOfNet(petriNet, loggedUser); diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java index ffcff4f62b..05a329af96 100644 --- a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java @@ -550,7 +550,8 @@ public void removeRoleOfDeletedPetriNet(PetriNet petriNet) { @Override public void removeRoleOfDeletedPetriNet(Set petriNetRoles) { Pageable pageable = PageRequest.of(0, paginationProperties.getBackendPageSize()); - Collection roleIds = petriNetRoles.stream().filter(r -> !r.isGlobal()).map(ProcessRole::get_id).collect(Collectors.toSet()); + Set nonGlobalPetriNetRoles = petriNetRoles.stream().filter(r -> !r.isGlobal()).collect(Collectors.toSet()); + Collection roleIds = nonGlobalPetriNetRoles.stream().map(ProcessRole::get_id).collect(Collectors.toSet()); Pageable realmPageable = PageRequest.of(0, paginationProperties.getBackendPageSize()); Page realms; do { @@ -559,7 +560,7 @@ public void removeRoleOfDeletedPetriNet(Set petriNetRoles) { for (Realm realm : realms.getContent()) { do { users = searchUsersByRoleIds(roleIds, collectionNameProvider.getCollectionNameForRealm(realm.getName()), pageable); - users.getContent().forEach(u -> removeRoles(u, petriNetRoles)); + users.getContent().forEach(u -> removeRoles(u, nonGlobalPetriNetRoles)); pageable = pageable.next(); } while (users.hasNext()); } From 39b5a8f5b6c2ac2a095007e95bd7072da4f41d89 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Wed, 3 Dec 2025 13:26:24 +0100 Subject: [PATCH 4/4] - removed commented code --- .../engine/petrinet/service/ProcessRoleService.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java index 15d54946c3..0c0f67233b 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java @@ -147,10 +147,6 @@ protected void assignRolesToActor(Collection oldActorRoles, Collect Set rolesNewToUser = getRolesNewToActor(userOldRoles, requestedRoles); Set rolesRemovedFromUser = getRolesRemovedFromActor(userOldRoles, requestedRoles); -// String idOfPetriNetContainingRole = getProcessIdRoleBelongsTo(rolesNewToUser, rolesRemovedFromUser); -// if (!isGlobalFromFirstRole(rolesNewToUser) && !isGlobalFromFirstRole(rolesRemovedFromUser) && idOfPetriNetContainingRole == null) { -// return; -// } oldActorRoles.clear(); oldActorRoles.addAll(updateRequestedRoles(userOldRoles, rolesNewToUser, rolesRemovedFromUser));