Author: angela
Date: Wed Apr 24 12:39:26 2019
New Revision: 1858042
URL: http://svn.apache.org/viewvc?rev=1858042&view=rev
Log:
OAK-8270 : Add variant of PermissionUtil.getReadOnlyTree that never returns null
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
Wed Apr 24 12:39:26 2019
@@ -94,7 +94,7 @@ class CompositePermissionProvider implem
@NotNull
@Override
public Set<String> getPrivileges(@Nullable Tree tree) {
- Tree immutableTree = PermissionUtil.getReadOnlyTree(tree,
immutableRoot);
+ Tree immutableTree = PermissionUtil.getReadOnlyTreeOrNull(tree,
immutableRoot);
PrivilegeBits result = PrivilegeBits.getInstance();
PrivilegeBits denied = PrivilegeBits.getInstance();
@@ -123,7 +123,7 @@ class CompositePermissionProvider implem
@Override
public boolean hasPrivileges(@Nullable Tree tree, @NotNull String...
privilegeNames) {
- Tree immutableTree = PermissionUtil.getReadOnlyTree(tree,
immutableRoot);
+ Tree immutableTree = PermissionUtil.getReadOnlyTreeOrNull(tree,
immutableRoot);
PrivilegeBits privilegeBits =
privilegeBitsProvider.getBits(privilegeNames);
if (privilegeBits.isEmpty()) {
return true;
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
Wed Apr 24 12:39:26 2019
@@ -88,12 +88,12 @@ public class PermissionProviderImpl impl
@NotNull
@Override
public Set<String> getPrivileges(@Nullable Tree tree) {
- return
getCompiledPermissions().getPrivileges(PermissionUtil.getReadOnlyTree(tree,
immutableRoot));
+ return
getCompiledPermissions().getPrivileges(PermissionUtil.getReadOnlyTreeOrNull(tree,
immutableRoot));
}
@Override
public boolean hasPrivileges(@Nullable Tree tree, @NotNull String...
privilegeNames) {
- return
getCompiledPermissions().hasPrivileges(PermissionUtil.getReadOnlyTree(tree,
immutableRoot), privilegeNames);
+ return
getCompiledPermissions().hasPrivileges(PermissionUtil.getReadOnlyTreeOrNull(tree,
immutableRoot), privilegeNames);
}
@NotNull
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
Wed Apr 24 12:39:26 2019
@@ -107,11 +107,20 @@ public final class PermissionUtil implem
}
@Nullable
- public static Tree getReadOnlyTree(@Nullable Tree tree, @NotNull Root
readOnlyRoot) {
+ public static Tree getReadOnlyTreeOrNull(@Nullable Tree tree, @NotNull
Root readOnlyRoot) {
if (tree instanceof ReadOnly) {
return tree;
} else {
return (tree == null) ? null :
readOnlyRoot.getTree(tree.getPath());
}
}
+
+ @NotNull
+ public static Tree getReadOnlyTree(@NotNull Tree tree, @NotNull Root
readOnlyRoot) {
+ if (tree instanceof ReadOnly) {
+ return tree;
+ } else {
+ return readOnlyRoot.getTree(tree.getPath());
+ }
+ }
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
Wed Apr 24 12:39:26 2019
@@ -28,6 +28,8 @@ import org.apache.jackrabbit.oak.Abstrac
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.tree.ReadOnly;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
import org.apache.jackrabbit.oak.plugins.tree.TreeType;
import
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType;
@@ -49,6 +51,8 @@ import static org.apache.jackrabbit.oak.
import static
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_READ;
import static
org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants.JCR_WRITE;
import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.withSettings;
public class CompositeProviderCustomMixTest extends AbstractSecurityTest {
@@ -93,6 +97,7 @@ public class CompositeProviderCustomMixT
actionMap.put(JCR_NODE_TYPE_MANAGEMENT,
JackrabbitSession.ACTION_NODE_TYPE_MANAGEMENT);
actionMap.put(JCR_WRITE, JackrabbitSession.ACTION_ADD_NODE);
+ Tree tree = mock(Tree.class,
withSettings().extraInterfaces(ReadOnly.class));
// tests all possible 256 shuffles
for (CompositionType type : CompositionType.values()) {
for (Set<String> granted1 : Sets.powerSet(supp1)) {
@@ -101,7 +106,7 @@ public class CompositeProviderCustomMixT
CompositePermissionProvider cpp = buildCpp(supp1,
granted1, supp2, granted2, type, grantMap);
boolean expected = expected(ps, supp1, granted1,
supp2, granted2, type, false);
- boolean result1 = cpp.isGranted(null, null,
mapToPermissions(ps, grantMap));
+ boolean result1 = cpp.isGranted(tree, null,
mapToPermissions(ps, grantMap));
String err1 = "[isGranted1] Checking " + ps + " in
{supported: " + supp1 + ", granted: "
+ granted1 + "} " + type + " {supported: " +
supp2 + ", granted: " + granted2 + "}";
assertEquals(err1, expected, result1);
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java?rev=1858042&r1=1858041&r2=1858042&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtilTest.java
Wed Apr 24 12:39:26 2019
@@ -131,6 +131,34 @@ public class PermissionUtilTest {
}
@Test
+ public void testGetReadOnlyTreeOrNullFromNull() {
+ Root r = mock(Root.class);
+
+ assertNull(PermissionUtil.getReadOnlyTreeOrNull(null, r));
+ verify(r, never()).getTree(anyString());
+ }
+
+ @Test
+ public void testGetReadOnlyTreeOrNull() {
+ Tree readOnlyTree = mock(Tree.class,
withSettings().extraInterfaces(ReadOnly.class));
+ Root r = mock(Root.class);
+
+ assertSame(readOnlyTree,
PermissionUtil.getReadOnlyTreeOrNull(readOnlyTree, r));
+ verify(r, never()).getTree(anyString());
+ }
+
+ @Test
+ public void testGetReadOnlyTreeOrNullFromTree() {
+ Tree readOnlyTree = mock(Tree.class,
withSettings().extraInterfaces(ReadOnly.class));
+
+ Root r =
when(mock(Root.class).getTree("/path")).thenReturn(readOnlyTree).getMock();
+ Tree t =
when(mock(Tree.class).getPath()).thenReturn("/path").getMock();
+
+ assertSame(readOnlyTree, PermissionUtil.getReadOnlyTreeOrNull(t, r));
+ verify(r, times(1)).getTree("/path");
+ }
+
+ @Test
public void testGetReadOnlyTree() {
Tree readOnlyTree = mock(Tree.class,
withSettings().extraInterfaces(ReadOnly.class));
Root r = mock(Root.class);