Author: angela
Date: Tue Nov 12 11:57:40 2013
New Revision: 1541015

URL: http://svn.apache.org/r1541015
Log:
OAK-949 : UserQuery does not properly work for the optional everyone group

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java?rev=1541015&r1=1541014&r2=1541015&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
 Tue Nov 12 11:57:40 2013
@@ -38,6 +38,7 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
+import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
 import org.apache.jackrabbit.util.ISO9075;
 import org.apache.jackrabbit.util.Text;
@@ -119,19 +120,34 @@ public class UserQueryManager {
                     .append(sortDir.getDirection());
         }
 
-        if (builder.getGroupID() == null) {
+        final String groupId = builder.getGroupID();
+        if (groupId == null || EveryonePrincipal.NAME.equals(groupId)) {
             long offset = builder.getOffset();
             if (bound != null && offset > 0) {
                 log.warn("Found bound {} and offset {} in limit. Discarding 
offset.", bound, offset);
                 offset = 0;
             }
-            return findAuthorizables(statement.toString(), 
builder.getMaxCount(), offset, null);
+            Iterator<Authorizable> result = 
findAuthorizables(statement.toString(), builder.getMaxCount(), offset, null);
+            if (groupId == null) {
+                return result;
+            } else {
+                return Iterators.filter(result, new Predicate<Authorizable>() {
+                    @Override
+                    public boolean apply(@Nullable Authorizable authorizable) {
+                        try {
+                            return authorizable != null && 
!groupId.equals(authorizable.getID());
+                        } catch (RepositoryException e) {
+                            return false;
+                        }
+                    }
+                });
+            }
         } else {
             // filtering by group name included in query -> enforce offset
             // and limit on the result set.
             Iterator<Authorizable> result = 
findAuthorizables(statement.toString(), Long.MAX_VALUE, 0, null);
             Predicate groupFilter = new GroupPredicate(userManager,
-                    builder.getGroupID(),
+                    groupId,
                     builder.isDeclaredMembersOnly());
             return ResultIterator.create(builder.getOffset(), 
builder.getMaxCount(),
                     Iterators.filter(result, groupFilter));

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java?rev=1541015&r1=1541014&r2=1541015&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/UserQueryTest.java
 Tue Nov 12 11:57:40 2013
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.Query;
 import org.apache.jackrabbit.api.security.user.QueryBuilder;
 import org.apache.jackrabbit.api.security.user.User;
+import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.junit.Test;
 
 /**
@@ -296,6 +297,33 @@ public class UserQueryTest extends Abstr
     }
 
     @Test
+    public void testFindInEveryoneGroup() throws RepositoryException {
+        Authorizable everyone = 
userMgr.getAuthorizable(EveryonePrincipal.NAME);
+        boolean doRemove = false;
+        try {
+            if (everyone == null) {
+                everyone = userMgr.createGroup(EveryonePrincipal.NAME);
+                superuser.save();
+                doRemove = true;
+            }
+
+            Iterator<Authorizable> result = userMgr.findAuthorizables(new 
Query() {
+                public <T> void build(QueryBuilder<T> builder) {
+                    builder.setScope(EveryonePrincipal.NAME, true);
+                }
+            });
+
+            Iterator<Authorizable> members = ((Group) 
everyone).getDeclaredMembers();
+            assertSameElements(result, members);
+        } finally {
+            if (doRemove) {
+                everyone.remove();
+                superuser.save();
+            }
+        }
+    }
+
+    @Test
     public void testNameMatch() throws RepositoryException {
         Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() {
             public <T> void build(QueryBuilder<T> builder) {


Reply via email to