Author: angela
Date: Tue Nov 29 11:20:31 2016
New Revision: 1771885
URL: http://svn.apache.org/viewvc?rev=1771885&view=rev
Log:
OAK-5182 : CugAccessControlManager.removePolicy should remove the mixin
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.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/CugAccessControlManager.java?rev=1771885&r1=1771884&r2=1771885&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManager.java
Tue Nov 29 11:20:31 2016
@@ -33,6 +33,8 @@ import javax.jcr.security.Privilege;
import com.google.common.base.Function;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlPolicy;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
import
org.apache.jackrabbit.commons.iterator.AccessControlPolicyIteratorAdapter;
@@ -42,6 +44,7 @@ import org.apache.jackrabbit.oak.api.Tre
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
import
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.PolicyOwner;
import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
@@ -56,6 +59,7 @@ import org.apache.jackrabbit.oak.util.Tr
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static org.apache.jackrabbit.oak.api.Type.NAMES;
import static
org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NODE_TYPES_PATH;
/**
@@ -151,6 +155,13 @@ class CugAccessControlManager extends Ab
if (!CugUtil.definesCug(cug)) {
throw new AccessControlException("Unexpected primary type of
node rep:cugPolicy.");
} else {
+ // remove the rep:CugMixin if it has been explicitly added
upon setPolicy
+ Set<String> mixins = Sets.newHashSet(TreeUtil.getNames(tree,
NodeTypeConstants.JCR_MIXINTYPES));
+ if (mixins.remove(MIX_REP_CUG_MIXIN)) {
+ tree.setProperty(JcrConstants.JCR_MIXINTYPES, mixins,
NAMES);
+ } else {
+ log.debug("Cannot remove mixin type " + MIX_REP_CUG_MIXIN);
+ }
cug.remove();
}
} else {
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.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/CugAccessControlManagerTest.java?rev=1771885&r1=1771884&r2=1771885&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugAccessControlManagerTest.java
Tue Nov 29 11:20:31 2016
@@ -39,6 +39,7 @@ import org.apache.jackrabbit.oak.api.Tre
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
import org.apache.jackrabbit.oak.spi.security.authorization.cug.CugPolicy;
@@ -337,6 +338,22 @@ public class CugAccessControlManagerTest
}
@Test
+ public void testRemovePolicyRemovesMixin() throws Exception {
+ ReadOnlyNodeTypeManager ntMgr =
ReadOnlyNodeTypeManager.getInstance(root, NamePathMapper.DEFAULT);
+
+ CugPolicy cug = getApplicableCug(SUPPORTED_PATH);
+ cugAccessControlManager.setPolicy(SUPPORTED_PATH, cug);
+ root.commit();
+
+ assertTrue(ntMgr.isNodeType(root.getTree(SUPPORTED_PATH),
MIX_REP_CUG_MIXIN));
+
+ cugAccessControlManager.removePolicy(SUPPORTED_PATH,
cugAccessControlManager.getPolicies(SUPPORTED_PATH)[0]);
+ root.commit();
+
+ assertFalse(ntMgr.isNodeType(root.getTree(SUPPORTED_PATH),
MIX_REP_CUG_MIXIN));
+ }
+
+ @Test
public void testRemoveInvalidPolicy() throws Exception {
List<AccessControlPolicy> invalidPolicies = ImmutableList.of(
new AccessControlPolicy() {},