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 an...@apache.org on 2015/12/02 10:30:02 UTC

svn commit: r1717596 - in /jackrabbit/oak/trunk/oak-authorization-cug/src: main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/ test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/

Author: angela
Date: Wed Dec  2 09:30:01 2015
New Revision: 1717596

URL: http://svn.apache.org/viewvc?rev=1717596&view=rev
Log:
OAK-3709 : CugValidator should ignore node type definitions

Modified:
    jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java
    jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java

Modified: jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java?rev=1717596&r1=1717595&r2=1717596&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java Wed Dec  2 09:30:01 2015
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.JcrConstant
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
 import org.apache.jackrabbit.oak.plugins.nodetype.TypePredicate;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
@@ -40,7 +41,7 @@ class CugValidatorProvider extends Valid
     @Override
     protected Validator getRootValidator(NodeState before, NodeState after, CommitInfo info) {
         this.isMixCug = new TypePredicate(after, MIX_REP_CUG_MIXIN);
-        return new CugValidator("", after);
+        return new CugValidator("", after, false);
     }
 
     private static CommitFailedException accessViolation(int code, String message) {
@@ -56,14 +57,24 @@ class CugValidatorProvider extends Valid
         }
     }
 
+    private static boolean isNodetypeTree(CugValidator parentValidator, String name) {
+        if (parentValidator.isNodetypeTree) {
+            return true;
+        } else {
+            return NodeTypeConstants.JCR_NODE_TYPES.equals(name) && NodeTypeConstants.JCR_SYSTEM.equals(parentValidator.parentName);
+        }
+    }
+
     private final class CugValidator extends DefaultValidator {
 
         private final NodeState parentAfter;
         private final String parentName;
+        private final boolean isNodetypeTree;
 
-        private CugValidator(@Nonnull String parentName, @Nonnull NodeState parentAfter) {
+        private CugValidator(@Nonnull String parentName, @Nonnull NodeState parentAfter, @Nonnull boolean isNodetypeTree) {
             this.parentAfter = parentAfter;
             this.parentName = parentName;
+            this.isNodetypeTree = isNodetypeTree;
         }
 
         //------------------------------------------------------< Validator >---
@@ -89,18 +100,18 @@ class CugValidatorProvider extends Valid
 
         @Override
         public Validator childNodeAdded(String name, NodeState after) throws CommitFailedException {
-            if (REP_CUG_POLICY.equals(name)) {
+            if (!isNodetypeTree && REP_CUG_POLICY.equals(name)) {
                 validateCugNode(parentAfter, after);
             }
-            return new VisibleValidator(new CugValidator(name, after), true, true);
+            return new VisibleValidator(new CugValidator(name, after, isNodetypeTree(this, name)), true, true);
         }
 
         @Override
         public Validator childNodeChanged(String name, NodeState before, NodeState after) throws CommitFailedException {
-            if (after.hasChildNode(REP_CUG_POLICY)) {
+            if (!isNodetypeTree && after.hasChildNode(REP_CUG_POLICY)) {
                 validateCugNode(after, after.getChildNode(REP_CUG_POLICY));
             }
-            return new VisibleValidator(new CugValidator(name, after), true, true);
+            return new VisibleValidator(new CugValidator(name, after, isNodetypeTree(this, name)), true, true);
         }
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java?rev=1717596&r1=1717595&r2=1717596&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java (original)
+++ jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java Wed Dec  2 09:30:01 2015
@@ -16,9 +16,17 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
 
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeTypeTemplate;
+
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.plugins.nodetype.write.ReadWriteNodeTypeManager;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.junit.Test;
@@ -133,4 +141,28 @@ public class CugValidatorTest extends Ab
             root.refresh();
         }
     }
+
+    @Test
+    public void testNodeTypeWithCugNames() throws Exception {
+        ReadWriteNodeTypeManager ntMgr = new ReadWriteNodeTypeManager() {
+            @Nonnull
+            @Override
+            protected Root getWriteRoot() {
+                return root;
+            }
+
+            @CheckForNull
+            @Override
+            protected Tree getTypes() {
+                return root.getTree(NODE_TYPES_PATH);
+            }
+        };
+        NodeTypeTemplate ntTemplate = ntMgr.createNodeTypeTemplate();
+        ntTemplate.setName("testNT");
+        NodeDefinitionTemplate ndt = ntMgr.createNodeDefinitionTemplate();
+        ndt.setName(REP_CUG_POLICY);
+        ndt.setRequiredPrimaryTypeNames(new String[] {JcrConstants.NT_BASE});
+        ntTemplate.getNodeDefinitionTemplates().add(ndt);
+        ntMgr.registerNodeType(ntTemplate, true);
+    }
 }
\ No newline at end of file