Author: stillalex
Date: Wed Apr 24 14:37:49 2019
New Revision: 1858054

URL: http://svn.apache.org/viewvc?rev=1858054&view=rev
Log:
OAK-8234 Reduce object allocation in PermissionProviderImpl for admin sessions


Added:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/AllPermissionProviderImpl.java
   (with props)
Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/AdministrativePermissionProviderTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java?rev=1858054&r1=1858053&r2=1858054&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
 Wed Apr 24 14:37:49 2019
@@ -29,10 +29,12 @@ import org.apache.jackrabbit.oak.securit
 import 
org.apache.jackrabbit.oak.security.authorization.accesscontrol.AccessControlImporter;
 import 
org.apache.jackrabbit.oak.security.authorization.accesscontrol.AccessControlManagerImpl;
 import 
org.apache.jackrabbit.oak.security.authorization.accesscontrol.AccessControlValidatorProvider;
+import 
org.apache.jackrabbit.oak.security.authorization.permission.AllPermissionProviderImpl;
 import 
org.apache.jackrabbit.oak.security.authorization.permission.MountPermissionProvider;
 import 
org.apache.jackrabbit.oak.security.authorization.permission.PermissionHook;
 import 
org.apache.jackrabbit.oak.security.authorization.permission.PermissionProviderImpl;
 import 
org.apache.jackrabbit.oak.security.authorization.permission.PermissionStoreValidatorProvider;
+import 
org.apache.jackrabbit.oak.security.authorization.permission.PermissionUtil;
 import 
org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidatorProvider;
 import 
org.apache.jackrabbit.oak.security.authorization.restriction.RestrictionProviderImpl;
 import org.apache.jackrabbit.oak.spi.commit.CommitHook;
@@ -199,6 +201,9 @@ public class AuthorizationConfigurationI
     public PermissionProvider getPermissionProvider(@NotNull Root root, 
@NotNull String workspaceName,
                                                     @NotNull Set<Principal> 
principals) {
         Context ctx = 
getSecurityProvider().getConfiguration(AuthorizationConfiguration.class).getContext();
+        if (PermissionUtil.isAdminOrSystem(principals, getParameters())) {
+            return new AllPermissionProviderImpl(root, this);
+        }
 
         if (mountInfoProvider.hasNonDefaultMounts()) {
             return new MountPermissionProvider(root, workspaceName, 
principals, getRestrictionProvider(),

Added: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/AllPermissionProviderImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/AllPermissionProviderImpl.java?rev=1858054&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/AllPermissionProviderImpl.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/AllPermissionProviderImpl.java
 Wed Apr 24 14:37:49 2019
@@ -0,0 +1,122 @@
+/*
+ * 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 java.util.Collections;
+import java.util.Set;
+
+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.plugins.tree.TreeLocation;
+import org.apache.jackrabbit.oak.plugins.tree.TreeType;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.RepositoryPermission;
+import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Implementation of the {@code PermissionProvider} interface that grants full
+ * permission everywhere.
+ */
+public final class AllPermissionProviderImpl implements PermissionProvider, 
AggregatedPermissionProvider {
+
+    private static final Set<String> ALL = 
Collections.singleton(PrivilegeConstants.JCR_ALL);
+
+    private final Root root;
+    private final ProviderCtx providerCtx;
+    private Root immutableRoot;
+
+    public AllPermissionProviderImpl(@NotNull Root root, @NotNull ProviderCtx 
providerCtx) {
+        this.root = root;
+        this.providerCtx = providerCtx;
+        this.immutableRoot = 
providerCtx.getRootProvider().createReadOnlyRoot(root);
+    }
+
+    @Override
+    public void refresh() {
+        immutableRoot = providerCtx.getRootProvider().createReadOnlyRoot(root);
+    }
+
+    @Override
+    public @NotNull Set<String> getPrivileges(@Nullable Tree tree) {
+        return ALL;
+    }
+
+    @Override
+    public boolean hasPrivileges(@Nullable Tree tree, @NotNull String... 
privilegeNames) {
+        return true;
+    }
+
+    @Override
+    public @NotNull RepositoryPermission getRepositoryPermission() {
+        return RepositoryPermission.ALL;
+    }
+
+    @Override
+    public @NotNull TreePermission getTreePermission(@NotNull Tree tree, 
@NotNull TreePermission parentPermission) {
+        return TreePermission.ALL;
+    }
+
+    @Override
+    public boolean isGranted(@NotNull Tree tree, @Nullable PropertyState 
property, long permissions) {
+        return true;
+    }
+
+    @Override
+    public boolean isGranted(@NotNull String oakPath, @NotNull String 
jcrActions) {
+        return true;
+    }
+
+    //---------------------------------------< AggregatedPermissionProvider 
>---
+
+    @Override
+    public @NotNull PrivilegeBits supportedPrivileges(Tree tree, PrivilegeBits 
privilegeBits) {
+        return (privilegeBits != null) ? privilegeBits : new 
PrivilegeBitsProvider(immutableRoot).getBits(PrivilegeConstants.JCR_ALL);
+    }
+
+    @Override
+    public long supportedPermissions(Tree tree, PropertyState property, long 
permissions) {
+        return permissions;
+    }
+
+    @Override
+    public long supportedPermissions(TreeLocation location, long permissions) {
+        return permissions;
+    }
+
+    @Override
+    public long supportedPermissions(TreePermission treePermission, 
PropertyState property, long permissions) {
+        return permissions;
+    }
+
+    @Override
+    public boolean isGranted(TreeLocation location, long permissions) {
+        return true;
+    }
+
+    @Override
+    public @NotNull TreePermission getTreePermission(Tree tree, TreeType type, 
TreePermission parentPermission) {
+        return TreePermission.ALL;
+    }
+}

Propchange: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/AllPermissionProviderImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/AdministrativePermissionProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/AdministrativePermissionProviderTest.java?rev=1858054&r1=1858053&r2=1858054&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/AdministrativePermissionProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/AdministrativePermissionProviderTest.java
 Wed Apr 24 14:37:49 2019
@@ -114,6 +114,9 @@ public class AdministrativePermissionPro
 
         TreeLocation location = 
TreeLocation.create(testSession.getLatestRoot(), "/test/non/existing/tree");
         assertTrue(((AggregatedPermissionProvider) 
permissionProvider).isGranted(location, Permissions.ALL));
+
+        location = TreeLocation.create(testSession.getLatestRoot(), 
"/non/existing/tree");
+        assertTrue(((AggregatedPermissionProvider) 
permissionProvider).isGranted(location, Permissions.ALL));
     }
 
     @Test
@@ -121,6 +124,6 @@ public class AdministrativePermissionPro
         assertTrue(permissionProvider instanceof AggregatedPermissionProvider);
         TreeLocation location = 
TreeLocation.create(testSession.getLatestRoot(), 
VersionConstants.VERSION_STORE_PATH + "/non/existing/tree");
 
-        assertFalse(((AggregatedPermissionProvider) 
permissionProvider).isGranted(location, Permissions.ALL));
+        assertTrue(((AggregatedPermissionProvider) 
permissionProvider).isGranted(location, Permissions.ALL));
     }
 }
\ No newline at end of file


Reply via email to