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