You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2018/07/23 13:42:07 UTC

svn commit: r1836495 - in /jackrabbit/oak/trunk/oak-jcr/src: main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java

Author: mreutegg
Date: Mon Jul 23 13:42:07 2018
New Revision: 1836495

URL: http://svn.apache.org/viewvc?rev=1836495&view=rev
Log:
OAK-7652: Node.getMixinNodeTypes can revive deleted node mixins (again)

Apply fix and enable test

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java?rev=1836495&r1=1836494&r2=1836495&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/NodeImpl.java Mon Jul 23 13:42:07 2018
@@ -1293,9 +1293,9 @@ public class NodeImpl<T extends NodeDele
     }
 
     @NotNull
-    private Iterator<String> getMixinTypeNames(@NotNull Tree tree) {
+    private Iterator<String> getMixinTypeNames(@NotNull Tree tree) throws RepositoryException {
         Iterator<String> mixinNames = Collections.emptyIterator();
-        if (tree.hasProperty(JcrConstants.JCR_MIXINTYPES)) {
+        if (tree.hasProperty(JcrConstants.JCR_MIXINTYPES) || canReadMixinTypes(tree)) {
             mixinNames = TreeUtil.getNames(tree, JcrConstants.JCR_MIXINTYPES).iterator();
         } else if (tree.getStatus() != Status.NEW) {
             // OAK-2441: for backwards compatibility with Jackrabbit 2.x try to
@@ -1307,6 +1307,14 @@ public class NodeImpl<T extends NodeDele
         return mixinNames;
     }
 
+    private boolean canReadMixinTypes(@NotNull Tree tree) throws RepositoryException {
+        // OAK-7652: use an zero length MVP to check read permission on jcr:mixinTypes
+        PropertyState mixinTypes = PropertyStates.createProperty(
+                JcrConstants.JCR_MIXINTYPES, Collections.emptyList(), Type.NAMES);
+        return sessionContext.getAccessManager().hasPermissions(
+                tree, mixinTypes, Permissions.READ_PROPERTY);
+    }
+
     private EffectiveNodeType getEffectiveNodeType() throws RepositoryException {
         return getNodeTypeManager().getEffectiveNodeType(dlg.getTree());
     }

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java?rev=1836495&r1=1836494&r2=1836495&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/CRUDTest.java Mon Jul 23 13:42:07 2018
@@ -37,7 +37,6 @@ import javax.jcr.nodetype.ConstraintViol
 import javax.jcr.nodetype.NodeType;
 
 import org.apache.jackrabbit.oak.fixture.NodeStoreFixture;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class CRUDTest extends AbstractRepositoryTest {
@@ -69,7 +68,6 @@ public class CRUDTest extends AbstractRe
     }
 
     // OAK-7652
-    @Ignore("OAK-7652")
     @Test
     public void testMixinsDescendant() throws Exception {
         Session session = getAdminSession();