You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2022/02/14 14:23:13 UTC

svn commit: r1898071 - in /jackrabbit/branches/2.20: ./ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/ jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/ jackrabbit-jcr2spi/src/main/java/o...

Author: reschke
Date: Mon Feb 14 14:23:13 2022
New Revision: 1898071

URL: http://svn.apache.org/viewvc?rev=1898071&view=rev
Log:
 	

JCR-4758: Implement JackrabbitAccessControlEntry.getPrivilegeCollection in jackrabbit
JCR-4757: Update Jackrabbit trunk to Oak 1.42.0
(merged r1896985 into 2.20)

Modified:
    jackrabbit/branches/2.20/   (props changed)
    jackrabbit/branches/2.20/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlEntryImpl.java
    jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractACLTemplateTest.java
    jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEntryTest.java
    jackrabbit/branches/2.20/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlEntryImpl.java
    jackrabbit/branches/2.20/jackrabbit-parent/pom.xml

Propchange: jackrabbit/branches/2.20/
------------------------------------------------------------------------------
  Merged /jackrabbit/trunk:r1896985

Modified: jackrabbit/branches/2.20/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlEntryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlEntryImpl.java?rev=1898071&r1=1898070&r2=1898071&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlEntryImpl.java (original)
+++ jackrabbit/branches/2.20/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AccessControlEntryImpl.java Mon Feb 14 14:23:13 2022
@@ -17,13 +17,13 @@
 package org.apache.jackrabbit.core.security.authorization;
 
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
+import org.apache.jackrabbit.api.security.authorization.PrivilegeCollection;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.conversion.NameResolver;
 import org.apache.jackrabbit.value.ValueHelper;
 
 import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
-import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
 import javax.jcr.security.AccessControlException;
@@ -31,6 +31,7 @@ import javax.jcr.security.Privilege;
 import java.security.Principal;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 
@@ -307,6 +308,34 @@ public abstract class AccessControlEntry
         return new Value[] {getRestriction(restrictionName)};
     }
 
+    @Override
+    public PrivilegeCollection getPrivilegeCollection() {
+        return new PrivilegeCollection() {
+            @Override
+            public Privilege[] getPrivileges() {
+                return AccessControlEntryImpl.this.getPrivileges();
+            }
+
+            @Override
+            public boolean includes(String... privilegeNames) throws RepositoryException {
+                if (privilegeNames.length == 0) {
+                    return true;
+                }
+                PrivilegeBits pb = AccessControlEntryImpl.this.getPrivilegeBits();
+                if (pb.isEmpty()) {
+                    return false;
+                }
+                Set<Privilege> privileges = new HashSet<>(privilegeNames.length);
+                PrivilegeManagerImpl privilegeMgr = getPrivilegeManager();
+                for (String pName : privilegeNames) {
+                    privileges.add(privilegeMgr.getPrivilege(pName));
+                }
+                PrivilegeBits toTest = privilegeMgr.getBits(privileges.toArray(new Privilege[0]));
+                return pb.includes(toTest);
+            }
+        };
+    }
+
     //-------------------------------------------------------------< Object >---
     /**
      * @see Object#hashCode()

Modified: jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractACLTemplateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractACLTemplateTest.java?rev=1898071&r1=1898070&r2=1898071&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractACLTemplateTest.java (original)
+++ jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractACLTemplateTest.java Mon Feb 14 14:23:13 2022
@@ -20,6 +20,7 @@ import java.security.Principal;
 import java.util.Collections;
 
 import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 import javax.jcr.security.AccessControlEntry;
 import javax.jcr.security.AccessControlException;
@@ -29,6 +30,7 @@ import org.apache.jackrabbit.api.Jackrab
 import org.apache.jackrabbit.api.JackrabbitWorkspace;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.api.security.authorization.PrivilegeCollection;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.core.security.TestPrincipal;
@@ -130,6 +132,11 @@ public abstract class AbstractACLTemplat
                     return null;
                 }
 
+                @Override
+                public PrivilegeCollection getPrivilegeCollection() throws RepositoryException {
+                    throw new UnsupportedRepositoryOperationException();
+                }
+
                 public Principal getPrincipal() {
                     return testPrincipal;
                 }
@@ -169,6 +176,11 @@ public abstract class AbstractACLTemplat
                     return null;
                 }
 
+                @Override
+                public PrivilegeCollection getPrivilegeCollection() throws RepositoryException {
+                    throw new UnsupportedRepositoryOperationException();
+                }
+
                 public Principal getPrincipal() {
                     return testPrincipal;
                 }

Modified: jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEntryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEntryTest.java?rev=1898071&r1=1898070&r2=1898071&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEntryTest.java (original)
+++ jackrabbit/branches/2.20/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/AbstractEntryTest.java Mon Feb 14 14:23:13 2022
@@ -24,16 +24,20 @@ import java.util.List;
 import java.util.Map;
 
 import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 import javax.jcr.security.AccessControlEntry;
 import javax.jcr.security.AccessControlException;
 import javax.jcr.security.Privilege;
 
 import org.apache.jackrabbit.api.JackrabbitWorkspace;
+import org.apache.jackrabbit.api.security.authorization.PrivilegeCollection;
 import org.apache.jackrabbit.test.NotExecutableException;
 import org.apache.jackrabbit.test.api.security.AbstractAccessControlTest;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
 
+import static org.junit.Assert.assertArrayEquals;
+
 /**
  * <code>AbstractEntryTest</code>...
  */
@@ -125,6 +129,22 @@ public abstract class AbstractEntryTest
         assertEquals(privMgr.getBits(privs), privMgr.getBits(entry.getPrivileges()));
     }
 
+    public void testGetPrivilegeCollection() throws RepositoryException, NotExecutableException {
+        JackrabbitAccessControlEntry entry = createEntry(new String[] {Privilege.JCR_READ, Privilege.JCR_WRITE}, true);
+
+        PrivilegeCollection pc = entry.getPrivilegeCollection();
+        assertArrayEquals(entry.getPrivileges(), pc.getPrivileges());
+        
+        assertTrue(pc.includes(Privilege.JCR_READ));
+        assertTrue(pc.includes(Privilege.JCR_WRITE));
+        assertTrue(pc.includes(Privilege.JCR_READ, Privilege.JCR_WRITE));
+        assertTrue(pc.includes(Privilege.JCR_READ, Privilege.JCR_MODIFY_PROPERTIES, Privilege.JCR_REMOVE_CHILD_NODES));
+        
+        assertFalse(pc.includes(Privilege.JCR_READ, Privilege.JCR_LIFECYCLE_MANAGEMENT));
+        assertFalse(pc.includes(Privilege.JCR_VERSION_MANAGEMENT));
+        assertFalse(pc.includes(Privilege.JCR_ALL));
+    }
+
     public void testEquals() throws RepositoryException, NotExecutableException  {
 
         Map<AccessControlEntry, AccessControlEntry> equalAces = new HashMap<AccessControlEntry, AccessControlEntry>();
@@ -210,6 +230,11 @@ public abstract class AbstractEntryTest
                 return null;
             }
 
+            @Override
+            public PrivilegeCollection getPrivilegeCollection() throws RepositoryException {
+                throw new UnsupportedRepositoryOperationException();
+            }
+
             public Principal getPrincipal() {
                 return testPrincipal;
             }
@@ -298,6 +323,11 @@ public abstract class AbstractEntryTest
                 return null;
             }
 
+            @Override
+            public PrivilegeCollection getPrivilegeCollection() throws RepositoryException {
+                throw new UnsupportedRepositoryOperationException();
+            }
+
             public Principal getPrincipal() {
                 return testPrincipal;
             }

Modified: jackrabbit/branches/2.20/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlEntryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlEntryImpl.java?rev=1898071&r1=1898070&r2=1898071&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlEntryImpl.java (original)
+++ jackrabbit/branches/2.20/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlEntryImpl.java Mon Feb 14 14:23:13 2022
@@ -25,12 +25,14 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
 import javax.jcr.Value;
 import javax.jcr.ValueFormatException;
 import javax.jcr.security.AccessControlException;
 import javax.jcr.security.Privilege;
 
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
+import org.apache.jackrabbit.api.security.authorization.PrivilegeCollection;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.QValue;
 import org.apache.jackrabbit.spi.QValueFactory;
@@ -152,6 +154,11 @@ class AccessControlEntryImpl implements
         return new Value[] {getRestriction(restrictionName)};
     }
 
+    @Override
+    public PrivilegeCollection getPrivilegeCollection() throws RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
     //-------------------------------------------------------------< Object >---
     @Override
     public int hashCode() {

Modified: jackrabbit/branches/2.20/jackrabbit-parent/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.20/jackrabbit-parent/pom.xml?rev=1898071&r1=1898070&r2=1898071&view=diff
==============================================================================
--- jackrabbit/branches/2.20/jackrabbit-parent/pom.xml (original)
+++ jackrabbit/branches/2.20/jackrabbit-parent/pom.xml Mon Feb 14 14:23:13 2022
@@ -46,7 +46,7 @@
     <test.opts.memory>-Xmx256m</test.opts.memory>
     <test.opts.modules />
     <test.opts>${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions</test.opts>
-    <oak.version>1.40.0</oak.version>
+    <oak.version>1.42.0</oak.version>
     <jetty.version>9.2.30.v20200428</jetty.version>
     <tika.version>2.2.1</tika.version>
     <project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>