Author: angela Date: Thu May 2 13:10:43 2019 New Revision: 1858538 URL: http://svn.apache.org/viewvc?rev=1858538&view=rev Log: OAK-8262 : CompiledPermissionImpl returns wrong type of TreePermission for child of permission store
Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java (with props) jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermissonTest.java (with props) Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImplTest.java jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreTest.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java?rev=1858538&r1=1858537&r2=1858538&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java Thu May 2 13:10:43 2019 @@ -211,7 +211,7 @@ final class CompiledPermissionImpl imple return new TreePermissionImpl(tree, type, parentPermission); } case INTERNAL: - return EMPTY; + return InternalTreePermission.INSTANCE; default: return new TreePermissionImpl(tree, type, parentPermission); } @@ -229,7 +229,7 @@ final class CompiledPermissionImpl imple TreeType type = typeProvider.getType(versionableTree); switch (type) { case HIDDEN : return ALL; - case INTERNAL : return EMPTY; + case INTERNAL : return InternalTreePermission.INSTANCE; // case VERSION is never expected here default: return new TreePermissionImpl(versionableTree, type, buildParentPermission(versionableTree)); @@ -460,6 +460,8 @@ final class CompiledPermissionImpl imple return ((TreePermissionImpl) parentPermission).type; } else if (parentPermission == TreePermission.EMPTY) { return TreeType.DEFAULT; + } else if (parentPermission == InternalTreePermission.INSTANCE) { + return TreeType.INTERNAL; } else if (parentPermission instanceof VersionTreePermission) { return TreeType.VERSION; } else if (parentPermission instanceof RepoPolicyTreePermission) { Added: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java?rev=1858538&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java (added) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java Thu May 2 13:10:43 2019 @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.security.authorization.permission; + +import org.apache.jackrabbit.oak.api.PropertyState; +import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission; +import org.apache.jackrabbit.oak.spi.state.NodeState; +import org.jetbrains.annotations.NotNull; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +final class InternalTreePermission implements TreePermission { + + private static final Logger log = LoggerFactory.getLogger(InternalTreePermission.class); + + static final TreePermission INSTANCE = new InternalTreePermission(); + + private InternalTreePermission() {} + + @Override + public @NotNull TreePermission getChildPermission(@NotNull String childName, @NotNull NodeState childState) { + return INSTANCE; + } + + @Override + public boolean canRead() { + return EMPTY.canRead(); + } + + @Override + public boolean canRead(@NotNull PropertyState property) { + return EMPTY.canRead(property); + } + + @Override + public boolean canReadAll() { + return EMPTY.canReadAll(); + } + + @Override + public boolean canReadProperties() { + return EMPTY.canReadProperties(); + } + + @Override + public boolean isGranted(long permissions) { + return EMPTY.isGranted(permissions); + } + + @Override + public boolean isGranted(long permissions, @NotNull PropertyState property) { + return EMPTY.isGranted(permissions, property); + } +} \ No newline at end of file Propchange: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermission.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImplTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImplTest.java?rev=1858538&r1=1858537&r2=1858538&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImplTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImplTest.java Thu May 2 13:10:43 2019 @@ -298,13 +298,9 @@ public class CompiledPermissionImplTest CompiledPermissionImpl cp = createForTestSession(ConfigurationParameters.EMPTY); - // FIXME: wrong TreePermission for child of internal path -> not EMPTY -// String[] internalPaths = new String[] { -// PERMISSIONS_STORE_PATH, -// PathUtils.concat(PERMISSIONS_STORE_PATH, testSession.getWorkspaceName()) -// }; - String[] internalPaths = new String[]{ - PERMISSIONS_STORE_PATH + String[] internalPaths = new String[] { + PERMISSIONS_STORE_PATH, + PathUtils.concat(PERMISSIONS_STORE_PATH, testSession.getWorkspaceName()) }; for (String internalPath : internalPaths) { Tree internalTree = createReadonlyTree(internalPath); @@ -317,7 +313,7 @@ public class CompiledPermissionImplTest assertTrue(cp.getPrivileges(internalTree).isEmpty()); TreePermission tp = createTreePermission(cp, internalPath); - assertSame(TreePermission.EMPTY, tp); + assertSame(InternalTreePermission.INSTANCE, tp); } } Added: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermissonTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermissonTest.java?rev=1858538&view=auto ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermissonTest.java (added) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermissonTest.java Thu May 2 13:10:43 2019 @@ -0,0 +1,67 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.security.authorization.permission; + +import org.apache.jackrabbit.oak.api.PropertyState; +import org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions; +import org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission; +import org.apache.jackrabbit.oak.spi.state.NodeState; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; +import static org.mockito.Mockito.mock; + +public class InternalTreePermissonTest { + + @Test + public void testGetChildPermission() { + assertSame(InternalTreePermission.INSTANCE, InternalTreePermission.INSTANCE.getChildPermission("name", mock(NodeState.class))); + } + + @Test + public void testCanRead() { + assertEquals(TreePermission.EMPTY.canRead(), InternalTreePermission.INSTANCE.canRead()); + } + + @Test + public void testCanReadProperty() { + PropertyState prop = mock(PropertyState.class); + assertEquals(TreePermission.EMPTY.canRead(prop), InternalTreePermission.INSTANCE.canRead(prop)); + } + + @Test + public void testCanReadAll() { + assertEquals(TreePermission.EMPTY.canReadAll(), InternalTreePermission.INSTANCE.canReadAll()); + } + + @Test + public void testCanReadProperties() { + assertEquals(TreePermission.EMPTY.canReadProperties(), InternalTreePermission.INSTANCE.canReadProperties()); + } + + @Test + public void testIsGranted() { + assertEquals(TreePermission.EMPTY.isGranted(Permissions.READ_NODE), InternalTreePermission.INSTANCE.isGranted(Permissions.READ_NODE)); + } + + @Test + public void testIsGrantedProperty() { + PropertyState prop = mock(PropertyState.class); + assertEquals(TreePermission.EMPTY.isGranted(Permissions.READ_PROPERTY, prop), InternalTreePermission.INSTANCE.isGranted(Permissions.READ_PROPERTY, prop)); + } +} \ No newline at end of file Propchange: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/InternalTreePermissonTest.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreTest.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreTest.java?rev=1858538&r1=1858537&r2=1858538&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreTest.java (original) +++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionStoreTest.java Thu May 2 13:10:43 2019 @@ -99,7 +99,7 @@ public class PermissionStoreTest extends PermissionProvider pp = createPermissionProvider(); Tree t = root.getTree(PermissionConstants.PERMISSIONS_STORE_PATH); - assertSame(TreePermission.EMPTY, pp.getTreePermission(t, TreePermission.EMPTY)); + assertSame(InternalTreePermission.INSTANCE, pp.getTreePermission(t, TreePermission.EMPTY)); } @Test