Author: mduerig
Date: Tue Nov 26 14:38:29 2013
New Revision: 1545674

URL: http://svn.apache.org/r1545674
Log:
OAK-710 : PermissionValidator: Proper permission evaluation for moving/renaming 
nodes (WIP)
Remove method unwrap from ImmutableTree, which duplicates method getNodeState 
on AbstractTree and replace callers of the former with the latter

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableTree.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java?rev=1545674&r1=1545673&r2=1545674&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableRoot.java
 Tue Nov 26 14:38:29 2013
@@ -18,7 +18,11 @@
  */
 package org.apache.jackrabbit.oak.core;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
+
 import java.io.InputStream;
+
 import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.oak.api.Blob;
@@ -32,9 +36,6 @@ import org.apache.jackrabbit.oak.query.Q
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static org.apache.jackrabbit.oak.commons.PathUtils.elements;
-
 /**
  * Simple implementation of the Root interface that only supports simple read
  * operations based on the {@code NodeState} (or {@code ImmutableTree})
@@ -112,7 +113,7 @@ public final class ImmutableRoot impleme
         return new QueryEngineImpl() {
             @Override
             protected ExecutionContext getExecutionContext() {
-                return new ExecutionContext(rootTree.unwrap(), rootTree, new 
PropertyIndexProvider());
+                return new ExecutionContext(rootTree.getNodeState(), rootTree, 
new PropertyIndexProvider());
             }
         };
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableTree.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableTree.java?rev=1545674&r1=1545673&r2=1545674&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableTree.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/ImmutableTree.java
 Tue Nov 26 14:38:29 2013
@@ -251,9 +251,6 @@ public final class ImmutableTree extends
     }
 
     
//--------------------------------------------------------------------------
-    public NodeState unwrap() {
-        return state;
-    }
 
     public int getType() {
         if (type == TreeTypeProvider.TYPE_NONE) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java?rev=1545674&r1=1545673&r2=1545674&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
 Tue Nov 26 14:38:29 2013
@@ -77,7 +77,7 @@ public class MoveAwarePermissionValidato
         ImmutableTree parent = moveCtx.rootBefore.getTree("/");
         TreePermission tp = getPermissionProvider().getTreePermission(parent, 
TreePermission.EMPTY);
         for (String n : source.getPath().split("/")) {
-            tp = tp.getChildPermission(n, parent.getChild(n).unwrap());
+            tp = tp.getChildPermission(n, parent.getChild(n).getNodeState());
         }
         Validator validator = createValidator(source, dest, tp, this);
         return new VisibleValidator(validator, true, false);
@@ -134,7 +134,7 @@ public class MoveAwarePermissionValidato
                     ImmutableTree rootTree = rootBefore.getTree("/");
                     TreePermission tp = 
getPermissionProvider().getTreePermission(rootTree, TreePermission.EMPTY);
                     for (String seg : Text.explode(sourcePath, '/')) {
-                        tp = tp.getChildPermission(seg, 
rootTree.getChild(seg).unwrap());
+                        tp = tp.getChildPermission(seg, 
rootTree.getChild(seg).getNodeState());
                     }
                     return diff(source, child, validator);
                 } // FIXME: else...
@@ -161,7 +161,7 @@ public class MoveAwarePermissionValidato
         private boolean diff(ImmutableTree source, ImmutableTree dest,
                              MoveAwarePermissionValidator validator) throws 
CommitFailedException {
             Validator nextValidator = validator.visibleValidator(source, dest);
-            CommitFailedException e = EditorDiff.process(nextValidator , 
source.unwrap(), dest.unwrap());
+            CommitFailedException e = EditorDiff.process(nextValidator , 
source.getNodeState(), dest.getNodeState());
             if (e != null) {
                 throw e;
             }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java?rev=1545674&r1=1545673&r2=1545674&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java
 Tue Nov 26 14:38:29 2013
@@ -16,6 +16,9 @@
  */
 package org.apache.jackrabbit.oak.security.authorization.permission;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.api.CommitFailedException.ACCESS;
+
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -39,9 +42,6 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.apache.jackrabbit.oak.util.ChildOrderDiff;
 import org.apache.jackrabbit.oak.util.TreeUtil;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static org.apache.jackrabbit.oak.api.CommitFailedException.ACCESS;
-
 /**
  * Validator implementation that checks for sufficient permission for all
  * write operations executed by a given content session.
@@ -185,7 +185,7 @@ class PermissionValidator extends Defaul
             }
             return null; // no need for further validation down the subtree
         } else {
-            TreePermission tp = 
parentPermission.getChildPermission(tree.getName(), tree.unwrap());
+            TreePermission tp = 
parentPermission.getChildPermission(tree.getName(), tree.getNodeState());
             if (!tp.isGranted(toTest)) {
                 throw new CommitFailedException(ACCESS, 0, "Access denied");
             }


Reply via email to