This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push:
new 3283cd999d [SYNCOPE-1933] Ensure to show all dynamic memberships
3283cd999d is described below
commit 3283cd999de6601a1be93635ca15e5f415953727
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Wed Nov 26 13:15:13 2025 +0100
[SYNCOPE-1933] Ensure to show all dynamic memberships
---
.../commons/wizards/any/AbstractGroupsModel.java | 5 ----
.../syncope/client/console/wizards/any/Groups.java | 16 ++++++------
.../syncope/client/enduser/panels/any/Groups.java | 5 ----
.../syncope/core/persistence/api/dao/GroupDAO.java | 30 +++++++++++-----------
.../core/persistence/jpa/PersistenceContext.java | 2 ++
.../persistence/jpa/dao/repo/GroupRepoExtImpl.java | 18 ++++++++-----
.../core/persistence/neo4j/PersistenceContext.java | 2 ++
.../neo4j/dao/repo/GroupRepoExtImpl.java | 18 ++++++++-----
8 files changed, 51 insertions(+), 45 deletions(-)
diff --git
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
index 395db18d56..7264856b08 100644
---
a/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
+++
b/client/idrepo/common-ui/src/main/java/org/apache/syncope/client/ui/commons/wizards/any/AbstractGroupsModel.java
@@ -56,10 +56,5 @@ public abstract class AbstractGroupsModel extends
ListModel<GroupTO> {
return memberships;
}
- /**
- * Retrieve dyn group memberships.
- */
- protected abstract void reloadDynMemberships();
-
public abstract List<String> getDynMemberships();
}
diff --git
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
index bf81f94d22..2304d6dde4 100644
---
a/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
+++
b/client/idrepo/console/src/main/java/org/apache/syncope/client/console/wizards/any/Groups.java
@@ -251,24 +251,24 @@ public class Groups extends AbstractGroups {
memberships.sort(Comparator.comparing(MembershipTO::getGroupName));
}
- @Override
protected void reloadDynMemberships() {
GroupFiqlSearchConditionBuilder builder =
SyncopeClient.getGroupSearchConditionBuilder();
List<CompleteCondition> conditions =
GroupableRelatableTO.class.cast(anyTO).getDynMemberships().
stream().map(membership ->
builder.is(Constants.KEY_FIELD_NAME).
- equalTo(membership.getGroupKey()).wrap()).
- collect(Collectors.toList());
+ equalTo(membership.getGroupKey()).wrap()).toList();
- dynMemberships = new ArrayList<>();
if
(SyncopeConsoleSession.get().owns(IdRepoEntitlement.GROUP_SEARCH) &&
!conditions.isEmpty()) {
- dynMemberships.addAll(groupRestClient.search(
+ dynMemberships = groupRestClient.search(
SyncopeConstants.ROOT_REALM,
builder.or(conditions).query(),
- -1,
- -1,
+ 1,
+ Constants.MAX_GROUP_LIST_SIZE,
new SortParam<>(Constants.NAME_FIELD_NAME, true)).
- stream().map(GroupTO::getName).toList());
+ stream().map(GroupTO::getName).toList();
+ } else {
+ dynMemberships =
GroupableRelatableTO.class.cast(anyTO).getDynMemberships().
+ stream().map(MembershipTO::getGroupName).toList();
}
}
diff --git
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
index 547bead8ac..2b1b32100d 100644
---
a/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
+++
b/client/idrepo/enduser/src/main/java/org/apache/syncope/client/enduser/panels/any/Groups.java
@@ -196,11 +196,6 @@ public class Groups extends Panel {
memberships =
GroupableRelatableTO.class.cast(anyTO).getMemberships();
}
- @Override
- protected void reloadDynMemberships() {
- // DO NOTHING
- }
-
@Override
public List<String> getDynMemberships() {
return List.of();
diff --git
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
index 68939522bd..54e9316196 100644
---
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
+++
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java
@@ -42,6 +42,9 @@ public interface GroupDAO extends AnyDAO<Group> {
Optional<? extends Group> findByName(String name);
+ @Override
+ Collection<String> findAllResourceKeys(String key);
+
/**
* Checks if the calling user is authorized to access the Group matching
the provided key, under the given
* realm.
@@ -74,6 +77,8 @@ public interface GroupDAO extends AnyDAO<Group> {
List<String> findADynMembers(Group group);
+ List<String> findUDynMembers(Group group);
+
long countAMembers(String groupKey);
long countUMembers(String groupKey);
@@ -84,6 +89,8 @@ public interface GroupDAO extends AnyDAO<Group> {
void clearADynMembers(Group group);
+ void clearUDynMembers(Group group);
+
/**
* Evaluates all the dynamic group membership conditions against the given
anyObject (invoked during save).
*
@@ -92,18 +99,6 @@ public interface GroupDAO extends AnyDAO<Group> {
*/
DynMembershipInfo refreshDynMemberships(AnyObject anyObject);
- /**
- * Removes the dynamic group memberships of the given anyObject (invoked
during delete).
- *
- * @param anyObject anyObject being deleted
- * @return groups dynamically assigned before refresh
- */
- Set<String> removeDynMemberships(AnyObject anyObject);
-
- List<String> findUDynMembers(Group group);
-
- void clearUDynMembers(Group group);
-
/**
* Evaluates all the dynamic group membership conditions against the given
user (invoked during save).
*
@@ -115,6 +110,14 @@ public interface GroupDAO extends AnyDAO<Group> {
/**
* Removes the dynamic group memberships of the given anyObject (invoked
during delete).
*
+ * @param anyObject anyObject being deleted
+ * @return groups dynamically assigned before refresh
+ */
+ Set<String> removeDynMemberships(AnyObject anyObject);
+
+ /**
+ * Removes the dynamic group memberships of the given user (invoked during
delete).
+ *
* @param user user being deleted
* @return groups dynamically assigned before refresh
*/
@@ -129,7 +132,4 @@ public interface GroupDAO extends AnyDAO<Group> {
Group saveAndRefreshDynMemberships(Group group);
List<TypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
-
- @Override
- Collection<String> findAllResourceKeys(String key);
}
diff --git
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
index 61378d2195..cf2dda8e13 100644
---
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
+++
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/PersistenceContext.java
@@ -663,6 +663,7 @@ public class PersistenceContext {
final AnyUtilsFactory anyUtilsFactory,
final @Lazy DynRealmDAO dynRealmDAO,
final @Lazy PlainSchemaDAO plainSchemaDAO,
+ final @Lazy RealmDAO realmDAO,
final AnyMatchDAO anyMatchDAO,
final @Lazy UserDAO userDAO,
final @Lazy AnyObjectDAO anyObjectDAO,
@@ -676,6 +677,7 @@ public class PersistenceContext {
publisher,
dynRealmDAO,
plainSchemaDAO,
+ realmDAO,
anyMatchDAO,
userDAO,
anyObjectDAO,
diff --git
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
index a7bad384c4..bb561b151f 100644
---
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
+++
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExtImpl.java
@@ -28,6 +28,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
+import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.IdRepoEntitlement;
import org.apache.syncope.core.persistence.api.dao.AnyDAO;
@@ -37,6 +38,7 @@ import
org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.RealmDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
import org.apache.syncope.core.persistence.api.entity.Any;
@@ -76,6 +78,8 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group> implements Group
protected final ApplicationEventPublisher publisher;
+ protected final RealmDAO realmDAO;
+
protected final AnyMatchDAO anyMatchDAO;
protected final UserDAO userDAO;
@@ -91,6 +95,7 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group> implements Group
final ApplicationEventPublisher publisher,
final DynRealmDAO dynRealmDAO,
final PlainSchemaDAO plainSchemaDAO,
+ final RealmDAO realmDAO,
final AnyMatchDAO anyMatchDAO,
final UserDAO userDAO,
final AnyObjectDAO anyObjectDAO,
@@ -106,6 +111,7 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group> implements Group
anyFinder,
anyUtilsFactory.getInstance(AnyTypeKind.GROUP));
this.publisher = publisher;
+ this.realmDAO = realmDAO;
this.anyMatchDAO = anyMatchDAO;
this.userDAO = userDAO;
this.anyObjectDAO = anyObjectDAO;
@@ -244,12 +250,12 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group> implements Group
if (merged.getUDynMembership() != null) {
SearchCond cond = SearchCondConverter.convert(searchCondVisitor,
merged.getUDynMembership().getFIQLCond());
long count = anySearchDAO.count(
- merged.getRealm(), true,
Set.of(merged.getRealm().getFullPath()), cond, AnyTypeKind.USER);
+ realmDAO.getRoot(), true,
Set.of(SyncopeConstants.ROOT_REALM), cond, AnyTypeKind.USER);
for (int page = 0; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE);
page++) {
List<User> matching = anySearchDAO.search(
- merged.getRealm(),
+ realmDAO.getRoot(),
true,
- Set.of(merged.getRealm().getFullPath()),
+ Set.of(SyncopeConstants.ROOT_REALM),
cond,
PageRequest.of(page, AnyDAO.DEFAULT_PAGE_SIZE),
AnyTypeKind.USER);
@@ -270,12 +276,12 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group> implements Group
merged.getADynMemberships().forEach(memb -> {
SearchCond cond = SearchCondConverter.convert(searchCondVisitor,
memb.getFIQLCond());
long count = anySearchDAO.count(
- merged.getRealm(), true,
Set.of(merged.getRealm().getFullPath()), cond, AnyTypeKind.ANY_OBJECT);
+ realmDAO.getRoot(), true,
Set.of(SyncopeConstants.ROOT_REALM), cond, AnyTypeKind.ANY_OBJECT);
for (int page = 0; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE);
page++) {
List<AnyObject> matching = anySearchDAO.search(
- merged.getRealm(),
+ realmDAO.getRoot(),
true,
- Set.of(merged.getRealm().getFullPath()),
+ Set.of(SyncopeConstants.ROOT_REALM),
cond,
PageRequest.of(page, AnyDAO.DEFAULT_PAGE_SIZE),
AnyTypeKind.ANY_OBJECT);
diff --git
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/PersistenceContext.java
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/PersistenceContext.java
index 1acec809aa..06b14c7220 100644
---
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/PersistenceContext.java
+++
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/PersistenceContext.java
@@ -930,6 +930,7 @@ public class PersistenceContext {
final @Lazy PlainSchemaDAO plainSchemaDAO,
final @Lazy DerSchemaDAO derSchemaDAO,
final @Lazy DynRealmDAO dynRealmDAO,
+ final @Lazy RealmDAO realmDAO,
final AnyMatchDAO anyMatchDAO,
final @Lazy UserDAO userDAO,
final @Lazy AnyObjectDAO anyObjectDAO,
@@ -949,6 +950,7 @@ public class PersistenceContext {
plainSchemaDAO,
derSchemaDAO,
dynRealmDAO,
+ realmDAO,
anyMatchDAO,
userDAO,
anyObjectDAO,
diff --git
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
index e54f7e76db..52e4cc2850 100644
---
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
+++
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/repo/GroupRepoExtImpl.java
@@ -29,6 +29,7 @@ import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import javax.cache.Cache;
+import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.IdRepoEntitlement;
import org.apache.syncope.core.persistence.api.dao.AnyDAO;
@@ -41,6 +42,7 @@ import
org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.DynRealmDAO;
import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.RealmDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.dao.search.SearchCond;
import org.apache.syncope.core.persistence.api.entity.Any;
@@ -89,6 +91,8 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group, Neo4jGroup> impl
protected final ApplicationEventPublisher publisher;
+ protected final RealmDAO realmDAO;
+
protected final AnyMatchDAO anyMatchDAO;
protected final UserDAO userDAO;
@@ -111,6 +115,7 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group, Neo4jGroup> impl
final PlainSchemaDAO plainSchemaDAO,
final DerSchemaDAO derSchemaDAO,
final DynRealmDAO dynRealmDAO,
+ final RealmDAO realmDAO,
final AnyMatchDAO anyMatchDAO,
final UserDAO userDAO,
final AnyObjectDAO anyObjectDAO,
@@ -133,6 +138,7 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group, Neo4jGroup> impl
neo4jTemplate,
neo4jClient);
this.publisher = publisher;
+ this.realmDAO = realmDAO;
this.anyMatchDAO = anyMatchDAO;
this.userDAO = userDAO;
this.anyObjectDAO = anyObjectDAO;
@@ -345,12 +351,12 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group, Neo4jGroup> impl
if (merged.getUDynMembership() != null) {
SearchCond cond = SearchCondConverter.convert(searchCondVisitor,
merged.getUDynMembership().getFIQLCond());
long count = anySearchDAO.count(
- merged.getRealm(), true,
Set.of(merged.getRealm().getFullPath()), cond, AnyTypeKind.USER);
+ realmDAO.getRoot(), true,
Set.of(SyncopeConstants.ROOT_REALM), cond, AnyTypeKind.USER);
for (int page = 0; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE);
page++) {
List<User> matching = anySearchDAO.search(
- merged.getRealm(),
+ realmDAO.getRoot(),
true,
- Set.of(merged.getRealm().getFullPath()),
+ Set.of(SyncopeConstants.ROOT_REALM),
cond,
PageRequest.of(page, AnyDAO.DEFAULT_PAGE_SIZE),
AnyTypeKind.USER);
@@ -370,12 +376,12 @@ public class GroupRepoExtImpl extends
AbstractAnyRepoExt<Group, Neo4jGroup> impl
merged.getADynMemberships().forEach(memb -> {
SearchCond cond = SearchCondConverter.convert(searchCondVisitor,
memb.getFIQLCond());
long count = anySearchDAO.count(
- merged.getRealm(), true,
Set.of(merged.getRealm().getFullPath()), cond, AnyTypeKind.ANY_OBJECT);
+ realmDAO.getRoot(), true,
Set.of(SyncopeConstants.ROOT_REALM), cond, AnyTypeKind.ANY_OBJECT);
for (int page = 0; page <= (count / AnyDAO.DEFAULT_PAGE_SIZE);
page++) {
List<AnyObject> matching = anySearchDAO.search(
- merged.getRealm(),
+ realmDAO.getRoot(),
true,
- Set.of(merged.getRealm().getFullPath()),
+ Set.of(SyncopeConstants.ROOT_REALM),
cond,
PageRequest.of(page, AnyDAO.DEFAULT_PAGE_SIZE),
AnyTypeKind.ANY_OBJECT);