Author: angela
Date: Tue Jul  7 14:20:55 2015
New Revision: 1689688

URL: http://svn.apache.org/r1689688
Log:
OAK-3078 : AccessControlAction: Omit setup for administrative principals

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlAction.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlAction.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlAction.java?rev=1689688&r1=1689687&r2=1689688&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlAction.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlAction.java
 Tue Jul  7 14:20:55 2015
@@ -17,6 +17,8 @@
 package org.apache.jackrabbit.oak.spi.security.user.action;
 
 import java.security.Principal;
+import java.util.Collections;
+import java.util.Set;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.jcr.RepositoryException;
@@ -34,6 +36,7 @@ import org.apache.jackrabbit.oak.namepat
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionConstants;
 import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
 import org.apache.jackrabbit.oak.spi.security.user.util.UserUtil;
 import org.slf4j.Logger;
@@ -105,6 +108,7 @@ public class AccessControlAction extends
     private SecurityProvider securityProvider;
     private String[] groupPrivilegeNames = new String[0];
     private String[] userPrivilegeNames = new String[0];
+    private Set<String> administrativePrincipals = Collections.emptySet();
 
     //-------------------------------------------------< AuthorizableAction 
>---
     @Override
@@ -112,6 +116,8 @@ public class AccessControlAction extends
         this.securityProvider = securityProvider;
         userPrivilegeNames = privilegeNames(config, USER_PRIVILEGE_NAMES);
         groupPrivilegeNames = privilegeNames(config, GROUP_PRIVILEGE_NAMES);
+
+        administrativePrincipals = 
securityProvider.getConfiguration(AuthorizationConfiguration.class).getParameters().getConfigValue(PermissionConstants.PARAM_ADMINISTRATIVE_PRINCIPALS,
 Collections.EMPTY_SET);
     }
 
     @Override
@@ -154,6 +160,11 @@ public class AccessControlAction extends
             log.debug("No privileges configured for groups and users; omit ac 
setup.");
             return;
         }
+        Principal principal = authorizable.getPrincipal();
+        if (administrativePrincipals.contains(principal.getName())) {
+            log.debug("Administrative principal: " + principal.getName() + "; 
omit ac setup.");
+            return;
+        }
 
         String path = authorizable.getPath();
         AuthorizationConfiguration acConfig = 
securityProvider.getConfiguration(AuthorizationConfiguration.class);
@@ -171,7 +182,6 @@ public class AccessControlAction extends
             log.warn("Cannot process AccessControlAction: no applicable ACL at 
" + path);
         } else {
             // setup acl according to configuration.
-            Principal principal = authorizable.getPrincipal();
             boolean modified = false;
             if (authorizable.isGroup()) {
                 // new authorizable is a Group

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java?rev=1689688&r1=1689687&r2=1689688&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/user/action/AccessControlActionTest.java
 Tue Jul  7 14:20:55 2015
@@ -27,6 +27,8 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
 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.permission.PermissionConstants;
 import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
 import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
 import org.junit.Test;
@@ -46,7 +48,10 @@ public class AccessControlActionTest ext
                 AccessControlAction.GROUP_PRIVILEGE_NAMES, new String[] 
{PrivilegeConstants.JCR_READ},
                 AccessControlAction.USER_PRIVILEGE_NAMES, new String[] 
{PrivilegeConstants.JCR_ALL}
         );
-        return ConfigurationParameters.of(UserConfiguration.NAME, userConfig);
+        ConfigurationParameters authorizationConfig = 
ConfigurationParameters.of(
+                PermissionConstants.PARAM_ADMINISTRATIVE_PRINCIPALS, new 
String[] {"administrativePrincipalName"}
+        );
+        return ConfigurationParameters.of(UserConfiguration.NAME, userConfig, 
AuthorizationConfiguration.NAME, authorizationConfig);
     }
 
     @Test
@@ -86,13 +91,33 @@ public class AccessControlActionTest ext
         }
     }
 
+    @Test
+    public void testAdministrativePrincipals() throws Exception {
+        UserManager userMgr = getUserManager(root);
+        Group gr = null;
+        try {
+            gr = userMgr.createGroup("administrativePrincipalName");
+            root.commit();
+
+            AccessControlManager acMgr = getAccessControlManager(root);
+            AccessControlPolicy[] policies = acMgr.getPolicies(gr.getPath());
+            assertEquals(0, policies.length);
+        } finally {
+            root.refresh();
+            if (gr != null) {
+                gr.remove();
+            }
+            root.commit();
+        }
+    }
+
     private void assertAcAction(Authorizable a, String expectedPrivName) 
throws Exception {
         AccessControlManager acMgr = getAccessControlManager(root);
-            AccessControlPolicy[] policies = acMgr.getPolicies(a.getPath());
-            assertEquals(1, policies.length);
-            assertTrue(policies[0] instanceof AccessControlList);
-            AccessControlList acl = (AccessControlList) policies[0];
-            assertEquals(1, acl.getAccessControlEntries().length);
-            assertArrayEquals(new 
Privilege[]{getPrivilegeManager(root).getPrivilege(expectedPrivName)}, 
acl.getAccessControlEntries()[0].getPrivileges());
+        AccessControlPolicy[] policies = acMgr.getPolicies(a.getPath());
+        assertEquals(1, policies.length);
+        assertTrue(policies[0] instanceof AccessControlList);
+        AccessControlList acl = (AccessControlList) policies[0];
+        assertEquals(1, acl.getAccessControlEntries().length);
+        assertArrayEquals(new 
Privilege[]{getPrivilegeManager(root).getPrivilege(expectedPrivName)}, 
acl.getAccessControlEntries()[0].getPrivileges());
     }
 }
\ No newline at end of file


Reply via email to