You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/09/05 07:36:01 UTC

[1/2] syncope git commit: [SYNCOPE-1199] Simpler check for assignable groups / any objects

Repository: syncope
Updated Branches:
  refs/heads/2_0_X 91329e620 -> 838edcc2b
  refs/heads/master a7e8b95a5 -> df4bd83c9


[SYNCOPE-1199] Simpler check for assignable groups / any objects


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/df4bd83c
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/df4bd83c
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/df4bd83c

Branch: refs/heads/master
Commit: df4bd83c9d4c8374991a57e33a496e93aeaa0f12
Parents: a7e8b95
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Sep 5 09:12:50 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Sep 5 09:34:41 2017 +0200

----------------------------------------------------------------------
 .../java/data/AbstractAnyDataBinder.java        |  8 ------
 .../java/data/AnyObjectDataBinderImpl.java      | 26 +++-----------------
 .../java/data/UserDataBinderImpl.java           | 26 +++-----------------
 3 files changed, 8 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/df4bd83c/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index b37c5a2..a0620e6 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -43,7 +43,6 @@ import org.apache.syncope.common.lib.types.ResourceOperation;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidPlainAttrValueException;
 import org.apache.syncope.core.persistence.api.dao.AllowedSchemas;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
-import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
@@ -51,7 +50,6 @@ import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrValueDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 import org.apache.syncope.core.persistence.api.dao.RelationshipTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -122,15 +120,9 @@ abstract class AbstractAnyDataBinder {
     protected ExternalResourceDAO resourceDAO;
 
     @Autowired
-    protected PolicyDAO policyDAO;
-
-    @Autowired
     protected RelationshipTypeDAO relationshipTypeDAO;
 
     @Autowired
-    protected AnySearchDAO searchDAO;
-
-    @Autowired
     protected EntityFactory entityFactory;
 
     @Autowired

http://git-wip-us.apache.org/repos/asf/syncope/blob/df4bd83c/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index 020ee74..40bb036 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -158,11 +158,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
         AnyUtils anyUtils = anyUtilsFactory.getInstance(AnyTypeKind.ANY_OBJECT);
         if (anyObject.getRealm() != null) {
             // relationships
-            Collection<String> assignableAnyObjects = anyObjectTO.getRelationships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT).stream().
-                            map(a -> a.getKey()).collect(Collectors.toList());
-
             anyObjectTO.getRelationships().forEach(relationshipTO -> {
                 if (StringUtils.isBlank(relationshipTO.getRightType())
                         || AnyTypeKind.USER.name().equals(relationshipTO.getRightType())
@@ -177,7 +172,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                     AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey());
                     if (otherEnd == null) {
                         LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey());
-                    } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                    } else if (anyObject.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) {
                         RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType());
                         if (relationshipType == null) {
                             LOG.debug("Ignoring invalid relationship type {}", relationshipTO.getType());
@@ -201,11 +196,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
             });
 
             // memberships
-            Collection<String> assignableGroups = anyObjectTO.getMemberships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.GROUP).stream().
-                            map(g -> g.getKey()).collect(Collectors.toList());
-
             anyObjectTO.getMemberships().forEach(membershipTO -> {
                 Group group = membershipTO.getRightKey() == null
                         ? groupDAO.findByName(membershipTO.getGroupName())
@@ -213,7 +203,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                 if (group == null) {
                     LOG.debug("Ignoring invalid group "
                             + membershipTO.getRightKey() + " / " + membershipTO.getGroupName());
-                } else if (assignableGroups.contains(group.getKey())) {
+                } else if (anyObject.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                     AMembership membership = entityFactory.newEntity(AMembership.class);
                     membership.setRightEnd(group);
                     membership.setLeftEnd(anyObject);
@@ -275,10 +265,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
         Set<String> toBeProvisioned = new HashSet<>();
 
         // relationships
-        Collection<String> assignableAnyObjects =
-                searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT).stream().
-                        map(a -> a.getKey()).collect(Collectors.toList());
-
         anyObjectPatch.getRelationships().stream().
                 filter(patch -> patch.getRelationshipTO() != null).forEachOrdered((patch) -> {
             RelationshipType relationshipType = relationshipTypeDAO.find(patch.getRelationshipTO().getType());
@@ -309,7 +295,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                         AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey());
                         if (otherEnd == null) {
                             LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey());
-                        } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                        } else if (anyObject.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) {
                             ARelationship newRelationship = entityFactory.newEntity(ARelationship.class);
                             newRelationship.setType(relationshipType);
                             newRelationship.setRightEnd(otherEnd);
@@ -335,10 +321,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
         SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
 
         // memberships
-        Collection<String> assignableGroups =
-                searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.GROUP).stream().
-                        map(g -> g.getKey()).collect(Collectors.toList());
-
         anyObjectPatch.getMemberships().stream().
                 filter((membPatch) -> (membPatch.getGroup() != null)).forEachOrdered(membPatch -> {
             Optional<? extends AMembership> membership = anyObject.getMembership(membPatch.getGroup());
@@ -356,7 +338,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                 Group group = groupDAO.find(membPatch.getGroup());
                 if (group == null) {
                     LOG.debug("Ignoring invalid group {}", membPatch.getGroup());
-                } else if (assignableGroups.contains(group.getKey())) {
+                } else if (anyObject.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                     AMembership newMembership = entityFactory.newEntity(AMembership.class);
                     newMembership.setRightEnd(group);
                     newMembership.setLeftEnd(anyObject);

http://git-wip-us.apache.org/repos/asf/syncope/blob/df4bd83c/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index d1ce405..989a076 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -203,16 +203,11 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         AnyUtils anyUtils = anyUtilsFactory.getInstance(AnyTypeKind.USER);
         if (user.getRealm() != null) {
             // relationships
-            Collection<String> assignableAnyObjects = userTO.getRelationships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT).stream().
-                            map(a -> a.getKey()).collect(Collectors.toList());
-
             userTO.getRelationships().forEach(relationshipTO -> {
                 AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey());
                 if (otherEnd == null) {
                     LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey());
-                } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                } else if (user.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) {
                     RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType());
                     if (relationshipType == null) {
                         LOG.debug("Ignoring invalid relationship type {}", relationshipTO.getType());
@@ -235,11 +230,6 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
             });
 
             // memberships
-            Collection<String> assignableGroups = userTO.getMemberships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.GROUP).stream().
-                            map(g -> g.getKey()).collect(Collectors.toList());
-
             userTO.getMemberships().forEach(membershipTO -> {
                 Group group = membershipTO.getRightKey() == null
                         ? groupDAO.findByName(membershipTO.getGroupName())
@@ -247,7 +237,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                 if (group == null) {
                     LOG.debug("Ignoring invalid group "
                             + membershipTO.getRightKey() + " / " + membershipTO.getGroupName());
-                } else if (assignableGroups.contains(group.getKey())) {
+                } else if (user.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                     UMembership membership = entityFactory.newEntity(UMembership.class);
                     membership.setRightEnd(group);
                     membership.setLeftEnd(user);
@@ -378,10 +368,6 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         Set<String> toBeProvisioned = new HashSet<>();
 
         // relationships
-        Collection<String> assignableAnyObjects =
-                searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT).stream().
-                        map(a -> a.getKey()).collect(Collectors.toList());
-
         userPatch.getRelationships().stream().
                 filter(patch -> patch.getRelationshipTO() != null).forEachOrdered((patch) -> {
             RelationshipType relationshipType = relationshipTypeDAO.find(patch.getRelationshipTO().getType());
@@ -402,7 +388,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                     AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey());
                     if (otherEnd == null) {
                         LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey());
-                    } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                    } else if (user.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) {
                         URelationship newRelationship = entityFactory.newEntity(URelationship.class);
                         newRelationship.setType(relationshipType);
                         newRelationship.setRightEnd(otherEnd);
@@ -427,10 +413,6 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
 
         // memberships
-        Collection<String> assignableGroups =
-                searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.GROUP).stream().
-                        map(g -> g.getKey()).collect(Collectors.toList());
-
         userPatch.getMemberships().stream().
                 filter(membPatch -> membPatch.getGroup() != null).forEachOrdered((membPatch) -> {
             Optional<? extends UMembership> membership = user.getMembership(membPatch.getGroup());
@@ -449,7 +431,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                 Group group = groupDAO.find(membPatch.getGroup());
                 if (group == null) {
                     LOG.debug("Ignoring invalid group {}", membPatch.getGroup());
-                } else if (assignableGroups.contains(group.getKey())) {
+                } else if (user.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                     UMembership newMembership = entityFactory.newEntity(UMembership.class);
                     newMembership.setRightEnd(group);
                     newMembership.setLeftEnd(user);


[2/2] syncope git commit: [SYNCOPE-1199] Simpler check for assignable groups / any objects

Posted by il...@apache.org.
[SYNCOPE-1199] Simpler check for assignable groups / any objects


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/838edcc2
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/838edcc2
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/838edcc2

Branch: refs/heads/2_0_X
Commit: 838edcc2b3b76666abc7903891e38f2524933fa2
Parents: 91329e6
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Sep 5 09:12:50 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Sep 5 09:35:54 2017 +0200

----------------------------------------------------------------------
 .../java/data/AbstractAnyDataBinder.java        |  8 ------
 .../java/data/AnyObjectDataBinderImpl.java      | 29 ++++----------------
 .../java/data/UserDataBinderImpl.java           | 26 +++---------------
 3 files changed, 10 insertions(+), 53 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/838edcc2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
index b280874..e271654 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AbstractAnyDataBinder.java
@@ -42,7 +42,6 @@ import org.apache.syncope.common.lib.types.ResourceOperation;
 import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidPlainAttrValueException;
 import org.apache.syncope.core.persistence.api.dao.AllowedSchemas;
 import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
-import org.apache.syncope.core.persistence.api.dao.AnySearchDAO;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
@@ -50,7 +49,6 @@ import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainAttrValueDAO;
 import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
-import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
 import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 import org.apache.syncope.core.persistence.api.dao.RelationshipTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.UserDAO;
@@ -123,15 +121,9 @@ abstract class AbstractAnyDataBinder {
     protected ExternalResourceDAO resourceDAO;
 
     @Autowired
-    protected PolicyDAO policyDAO;
-
-    @Autowired
     protected RelationshipTypeDAO relationshipTypeDAO;
 
     @Autowired
-    protected AnySearchDAO searchDAO;
-
-    @Autowired
     protected EntityFactory entityFactory;
 
     @Autowired

http://git-wip-us.apache.org/repos/asf/syncope/blob/838edcc2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index e6176b1..b6d5574 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -43,7 +43,6 @@ import org.apache.syncope.common.lib.types.PatchOperation;
 import org.apache.syncope.core.provisioning.api.PropagationByResource;
 import org.apache.syncope.common.lib.types.ResourceOperation;
 import org.apache.syncope.core.spring.BeanUtils;
-import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.AnyUtils;
@@ -177,11 +176,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
         AnyUtils anyUtils = anyUtilsFactory.getInstance(AnyTypeKind.ANY_OBJECT);
         if (anyObject.getRealm() != null) {
             // relationships
-            Collection<String> assignableAnyObjects = anyObjectTO.getRelationships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : CollectionUtils.collect(
-                            searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT),
-                            EntityUtils.keyTransformer());
             for (RelationshipTO relationshipTO : anyObjectTO.getRelationships()) {
                 if (StringUtils.isBlank(relationshipTO.getRightType())
                         || AnyTypeKind.USER.name().equals(relationshipTO.getRightType())
@@ -196,7 +190,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                     AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey());
                     if (otherEnd == null) {
                         LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey());
-                    } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                    } else if (anyObject.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) {
                         RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType());
                         if (relationshipType == null) {
                             LOG.debug("Ignoring invalid relationship type {}", relationshipTO.getType());
@@ -220,11 +214,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
             }
 
             // memberships
-            Collection<String> assignableGroups = anyObjectTO.getMemberships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : CollectionUtils.collect(
-                            searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.GROUP),
-                            EntityUtils.keyTransformer());
             for (MembershipTO membershipTO : anyObjectTO.getMemberships()) {
                 Group group = membershipTO.getRightKey() == null
                         ? groupDAO.findByName(membershipTO.getGroupName())
@@ -232,7 +221,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                 if (group == null) {
                     LOG.debug("Ignoring invalid group "
                             + membershipTO.getRightKey() + " / " + membershipTO.getGroupName());
-                } else if (assignableGroups.contains(group.getKey())) {
+                } else if (anyObject.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                     AMembership membership = entityFactory.newEntity(AMembership.class);
                     membership.setRightEnd(group);
                     membership.setLeftEnd(anyObject);
@@ -294,10 +283,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
         Set<String> toBeProvisioned = new HashSet<>();
 
         // relationships
-        Collection<String> assignableAnyObjects = CollectionUtils.collect(
-                searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT),
-                EntityUtils.keyTransformer());
-
         for (RelationshipPatch patch : anyObjectPatch.getRelationships()) {
             if (patch.getRelationshipTO() != null) {
                 RelationshipType relationshipType = relationshipTypeDAO.find(patch.getRelationshipTO().getType());
@@ -328,7 +313,9 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                             AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey());
                             if (otherEnd == null) {
                                 LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey());
-                            } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                            } else if (anyObject.getRealm().getFullPath().
+                                    startsWith(otherEnd.getRealm().getFullPath())) {
+
                                 relationship = entityFactory.newEntity(ARelationship.class);
                                 relationship.setType(relationshipType);
                                 relationship.setRightEnd(otherEnd);
@@ -355,10 +342,6 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
         SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
 
         // memberships
-        Collection<String> assignableGroups = CollectionUtils.collect(
-                searchDAO.searchAssignable(anyObject.getRealm().getFullPath(), AnyTypeKind.GROUP),
-                EntityUtils.keyTransformer());
-
         for (MembershipPatch membPatch : anyObjectPatch.getMemberships()) {
             if (membPatch.getGroup() != null) {
                 AMembership membership = anyObject.getMembership(membPatch.getGroup());
@@ -377,7 +360,7 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
                     Group group = groupDAO.find(membPatch.getGroup());
                     if (group == null) {
                         LOG.debug("Ignoring invalid group {}", membPatch.getGroup());
-                    } else if (assignableGroups.contains(group.getKey())) {
+                    } else if (anyObject.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                         membership = entityFactory.newEntity(AMembership.class);
                         membership.setRightEnd(group);
                         membership.setLeftEnd(anyObject);

http://git-wip-us.apache.org/repos/asf/syncope/blob/838edcc2/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index b9bdf21..b046089 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -210,16 +210,11 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         AnyUtils anyUtils = anyUtilsFactory.getInstance(AnyTypeKind.USER);
         if (user.getRealm() != null) {
             // relationships
-            Collection<String> assignableAnyObjects = userTO.getRelationships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : CollectionUtils.collect(
-                            searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT),
-                            EntityUtils.keyTransformer());
             for (RelationshipTO relationshipTO : userTO.getRelationships()) {
                 AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey());
                 if (otherEnd == null) {
                     LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey());
-                } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                } else if (user.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) {
                     RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType());
                     if (relationshipType == null) {
                         LOG.debug("Ignoring invalid relationship type {}", relationshipTO.getType());
@@ -242,11 +237,6 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
             }
 
             // memberships
-            Collection<String> assignableGroups = userTO.getMemberships().isEmpty()
-                    ? Collections.<String>emptyList()
-                    : CollectionUtils.collect(
-                            searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.GROUP),
-                            EntityUtils.keyTransformer());
             for (MembershipTO membershipTO : userTO.getMemberships()) {
                 Group group = membershipTO.getRightKey() == null
                         ? groupDAO.findByName(membershipTO.getGroupName())
@@ -254,7 +244,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                 if (group == null) {
                     LOG.debug("Ignoring invalid group "
                             + membershipTO.getRightKey() + " / " + membershipTO.getGroupName());
-                } else if (assignableGroups.contains(group.getKey())) {
+                } else if (user.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                     UMembership membership = entityFactory.newEntity(UMembership.class);
                     membership.setRightEnd(group);
                     membership.setLeftEnd(user);
@@ -391,10 +381,6 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         Set<String> toBeProvisioned = new HashSet<>();
 
         // relationships
-        Collection<String> assignableAnyObjects = CollectionUtils.collect(
-                searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.ANY_OBJECT),
-                EntityUtils.keyTransformer());
-
         for (RelationshipPatch patch : userPatch.getRelationships()) {
             if (patch.getRelationshipTO() != null) {
                 RelationshipType relationshipType = relationshipTypeDAO.find(patch.getRelationshipTO().getType());
@@ -415,7 +401,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                         AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey());
                         if (otherEnd == null) {
                             LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey());
-                        } else if (assignableAnyObjects.contains(otherEnd.getKey())) {
+                        } else if (user.getRealm().getFullPath().startsWith(otherEnd.getRealm().getFullPath())) {
                             relationship = entityFactory.newEntity(URelationship.class);
                             relationship.setType(relationshipType);
                             relationship.setRightEnd(otherEnd);
@@ -441,10 +427,6 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
         SyncopeClientException invalidValues = SyncopeClientException.build(ClientExceptionType.InvalidValues);
 
         // memberships
-        Collection<String> assignableGroups = CollectionUtils.collect(
-                searchDAO.searchAssignable(user.getRealm().getFullPath(), AnyTypeKind.GROUP),
-                EntityUtils.keyTransformer());
-
         for (MembershipPatch membPatch : userPatch.getMemberships()) {
             if (membPatch.getGroup() != null) {
                 UMembership membership = user.getMembership(membPatch.getGroup());
@@ -464,7 +446,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
                     Group group = groupDAO.find(membPatch.getGroup());
                     if (group == null) {
                         LOG.debug("Ignoring invalid group {}", membPatch.getGroup());
-                    } else if (assignableGroups.contains(group.getKey())) {
+                    } else if (user.getRealm().getFullPath().startsWith(group.getRealm().getFullPath())) {
                         membership = entityFactory.newEntity(UMembership.class);
                         membership.setRightEnd(group);
                         membership.setLeftEnd(user);