You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2010/12/15 13:11:04 UTC

svn commit: r1049516 - in /jackrabbit/branches/2.2: ./ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/ jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/ jackrabbit-core/src/test/java/org/apache/jackrabbit/co...

Author: angela
Date: Wed Dec 15 12:11:03 2010
New Revision: 1049516

URL: http://svn.apache.org/viewvc?rev=1049516&view=rev
Log:
JCR-2845 :  NodeBasedGroup#isMember(Principal) should have shortcut for the everyone group (merging changes from trunk)

Modified:
    jackrabbit/branches/2.2/   (props changed)
    jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
    jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java
    jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java

Propchange: jackrabbit/branches/2.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Dec 15 12:11:03 2010
@@ -2,4 +2,4 @@
 /jackrabbit/sandbox/JCR-1456:774917-886178
 /jackrabbit/sandbox/JCR-2170:812417-816332
 /jackrabbit/sandbox/tripod-JCR-2209:795441-795863
-/jackrabbit/trunk:1038201,1038203,1038205,1038657,1039064,1039347,1039408,1039422-1039423,1039888,1039946,1040033,1040090,1040459,1040601,1040606,1040661,1040958,1041379,1041439,1041761,1042643,1042647,1042978-1042982,1043084-1043086,1043088,1043343,1043357-1043358,1043430,1043554,1043616,1043618,1043637,1043656,1044312,1049473
+/jackrabbit/trunk:1038201,1038203,1038205,1038657,1039064,1039347,1039408,1039422-1039423,1039888,1039946,1040033,1040090,1040459,1040601,1040606,1040661,1040958,1041379,1041439,1041761,1042643,1042647,1042978-1042982,1043084-1043086,1043088,1043343,1043357-1043358,1043430,1043554,1043616,1043618,1043637,1043656,1044312,1049473,1049491

Modified: jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java?rev=1049516&r1=1049515&r2=1049516&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/GroupImpl.java Wed Dec 15 12:11:03 2010
@@ -260,7 +260,9 @@ class GroupImpl extends AuthorizableImpl
     }
 
     //------------------------------------------------------< inner classes >---
-
+    /**
+     * Principal Implementation
+     */
     private class NodeBasedGroup extends NodeBasedPrincipal implements java.security.acl.Group {
 
         private Set<Principal> members;
@@ -287,20 +289,18 @@ class GroupImpl extends AuthorizableImpl
          * @see java.security.acl.Group#isMember(Principal)
          */
         public boolean isMember(Principal member) {
-            Collection<Principal> members = getMembers();
-            if (members.contains(member)) {
-                // shortcut.
-                return true;
-            }
-
-            // test if member of a member-group
-            for (Principal p : members) {
-                if (p instanceof java.security.acl.Group &&
-                        ((java.security.acl.Group) p).isMember(member)) {
-                    return true;
+            // shortcut for everyone group -> avoid collecting all members
+            // as all users and groups are member of everyone.
+            try {
+                if (isEveryone()) {
+                    return !getPrincipal().equals(member);
                 }
+            } catch (RepositoryException e) {
+                // continue using regular membership evaluation
             }
-            return false;
+           
+            Collection<Principal> members = getMembers();
+            return members.contains(member);
         }
 
         /**

Modified: jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java?rev=1049516&r1=1049515&r2=1049516&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/security/user/GroupTest.java Wed Dec 15 12:11:03 2010
@@ -403,6 +403,46 @@ public class GroupTest extends AbstractU
         }
     }
 
+    public void testMembersInPrincipal() throws NotExecutableException, RepositoryException {
+        User auth = getTestUser(superuser);
+        Group newGroup = null;
+        Group newGroup2 = null;
+        try {
+            newGroup = userMgr.createGroup(getTestPrincipal());
+            newGroup2 = userMgr.createGroup(getTestPrincipal());
+            save(superuser);
+
+            newGroup.addMember(newGroup2);
+            save(superuser);
+            newGroup2.addMember(auth);
+            save(superuser);
+
+            java.security.acl.Group ngPrincipal = (java.security.acl.Group) newGroup.getPrincipal();
+            java.security.acl.Group ng2Principal = (java.security.acl.Group) newGroup2.getPrincipal();
+
+            assertFalse(ng2Principal.isMember(ngPrincipal));
+
+            // newGroup2 must be member of newGroup's principal
+            assertTrue(ngPrincipal.isMember(newGroup2.getPrincipal()));
+
+            // testuser must be member of newGroup2's and newGroup's principal (indirect)
+            assertTrue(ng2Principal.isMember(auth.getPrincipal()));
+            assertTrue(ngPrincipal.isMember(auth.getPrincipal()));
+
+        } finally {
+            if (newGroup != null) {
+                newGroup.removeMember(newGroup2);
+                newGroup.remove();
+                save(superuser);
+            }
+            if (newGroup2 != null) {
+                newGroup2.removeMember(auth);
+                newGroup2.remove();
+                save(superuser);
+            }
+        }
+    }
+
     public void testDeeplyNestedGroups() throws NotExecutableException, RepositoryException {
         Set<Group> groups = new HashSet<Group>();
         try {

Modified: jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java?rev=1049516&r1=1049515&r2=1049516&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java (original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/GroupImplTest.java Wed Dec 15 12:11:03 2010
@@ -102,4 +102,28 @@ public class GroupImplTest extends Abstr
             save(superuser);            
         }
     }
+
+    public void testEveryoneGroupPrincipal() throws Exception {
+        Group g = null;
+        try {
+            g = userMgr.createGroup(EveryonePrincipal.NAME);
+            save(superuser);
+
+            java.security.acl.Group principal = (java.security.acl.Group) g.getPrincipal();
+            assertTrue(principal.isMember(new Principal() {
+
+                public String getName() {
+                    return "test";
+                }
+            }));
+
+            assertFalse(principal.isMember(principal));
+
+        } finally {
+            if (g != null) {
+                g.remove();
+                save(superuser);
+            }
+        }
+    }
 }
\ No newline at end of file