Author: angela
Date: Mon Apr 15 07:16:49 2019
New Revision: 1857551
URL: http://svn.apache.org/viewvc?rev=1857551&view=rev
Log:
OAK-8190 : Dedicated authorization for system users (wip)
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/ (with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/pom.xml (with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/Filter.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/FilterProvider.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/PrincipalPolicy.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractTreePermission.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/Constants.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ContextImpl.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryCache.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryIterator.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryPredicate.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterProviderImpl.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProvider.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImpl.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionEntry.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalBasedAccessControlManager.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalBasedAuthorizationConfiguration.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalBasedPermissionProvider.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalPolicyImpl.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalPolicyImporter.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalPolicyValidatorProvider.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/Utils.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/package-info.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/oak/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/oak/spi/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/oak/spi/security/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/oak/spi/security/authorization/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/resources/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/nodetypes.cnd
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractPrincipalBasedTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractTreePermissionTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AccessControlManagerLimitedSystemUserTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AccessControlManagerLimitedUserTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ContextImplTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EffectivePolicyTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryCacheTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryIteratorTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryPredicateTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterImplTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterProviderImplTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportAbortTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBaseTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportBesteffortTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ImportIgnoreTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImplTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MockUtility.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderAccessControlTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderHiddenTypeTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderInternalTypeTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderVersionStoreTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionProviderVersionTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PolicyValidatorLimitedUserTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PolicyValidatorTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalBasedAccessControlManagerTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalBasedAuthorizationConfigurationOsgiTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalBasedAuthorizationConfigurationTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalBasedPermissionProviderTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalPolicyImplTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PrincipalPolicyImporterTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/RegularTreePermissionTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/RepositoryPermissionTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/TransientPrincipalTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/UnknownPrincipalAbortTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/UnknownPrincipalBesteffortTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/UnknownPrincipalIgnoreTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/UtilsTest.java
(with props)
jackrabbit/oak/trunk/oak-authorization-principalbased/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/VersionTreePermissionTest.java
(with props)
Modified:
jackrabbit/oak/trunk/pom.xml
Propchange: jackrabbit/oak/trunk/oak-authorization-principalbased/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Apr 15 07:16:49 2019
@@ -0,0 +1,5 @@
+target
+.*
+*.iml
+*.ipr
+*.iws
Added: jackrabbit/oak/trunk/oak-authorization-principalbased/pom.xml
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/pom.xml?rev=1857551&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-authorization-principalbased/pom.xml (added)
+++ jackrabbit/oak/trunk/oak-authorization-principalbased/pom.xml Mon Apr 15
07:16:49 2019
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-parent</artifactId>
+ <version>1.14-SNAPSHOT</version>
+ <relativePath>../oak-parent/pom.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <properties>
+ <!-- enable execution of jacoco and set minimal line coverage -->
+ <skip.coverage>false</skip.coverage>
+ <minimum.coverage>0.99</minimum.coverage>
+ <minimum.branch.coverage>1.0</minimum.branch.coverage>
+ </properties>
+
+ <artifactId>oak-authorization-principalbased</artifactId>
+ <name>Oak Principal-Based Authorization</name>
+ <packaging>bundle</packaging>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Import-Package>
+ <!-- OAK-7182 -->${guava.osgi.import},
+ *
+ </Import-Package>
+ <Export-Package>
+
org.apache.jackrabbit.oak.spi.security.authorization.principalbased
+ </Export-Package>
+ </instructions>
+ </configuration>
+ <executions>
+ <execution>
+ <id>baseline</id>
+ <goals>
+ <goal>baseline</goal>
+ </goals>
+ <phase>pre-integration-test</phase>
+ <configuration>
+ <!--
+ This is required because there's no prior
(stable) version
+ TODO: Removed post first release
+ -->
+ <skip>true</skip>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <!-- Optional OSGi dependencies, used only when running within OSGi -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.annotation</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.component.annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.service.metatype.annotations</artifactId>
+ </dependency>
+
+ <!-- Dependencies to other Oak components -->
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-api</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-query-spi</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-security-spi</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-store-spi</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <!-- JCR and Jackrabbit dependencies -->
+ <dependency>
+ <groupId>javax.jcr</groupId>
+ <artifactId>jcr</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-api</artifactId>
+ <version>${jackrabbit.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>jackrabbit-jcr-commons</artifactId>
+ <version>${jackrabbit.version}</version>
+ </dependency>
+
+ <!-- General utility libraries -->
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+
+ <!-- Logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+
+ <!-- Nullability annotations -->
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ </dependency>
+
+ <!-- Test dependencies -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-core</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-store-composite</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.testing.osgi-mock</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.jackrabbit</groupId>
+ <artifactId>oak-jcr</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+</project>
Propchange: jackrabbit/oak/trunk/oak-authorization-principalbased/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/Filter.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/Filter.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/Filter.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/Filter.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,64 @@
+/*
+ * 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.spi.security.authorization.principalbased;
+
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.osgi.annotation.versioning.ProviderType;
+
+import java.security.Principal;
+import java.util.Set;
+
+/**
+ * Interface that allows to define the principals for which principal based
access control management and permission
+ * evaluation can be executed. For any other principals this module would
never take effect.
+ */
+@ProviderType
+public interface Filter {
+
+ /**
+ * Reveals if this filter implementation is able to handle the given set
of principals.
+ *
+ * @param principals A set of principals.
+ * @return {@code true} if the principals can be dealt with by this filter
implementation, {@code false} otherwise.
+ */
+ boolean canHandle(@NotNull Set<Principal> principals);
+
+ /**
+ * Returns the Oak path of the {@code Tree} to which the policy for the
given {@code validPrincipal} will be bound.
+ * This method can rely on the fact that the given principal has been
{@link #canHandle(Set) validated} before and is
+ * not expected to validate the principal.
+ *
+ * @param validPrincipal A valid principal i.e. that has been validated
through {@link #canHandle(Set)}.
+ * @return The absolute oak path to an exiting {@code Tree}. The policy
for the given principal will be bound to that tree.
+ * @throws IllegalArgumentException If the specified principal is not
validated/valid.
+ */
+ @NotNull
+ String getOakPath(@NotNull Principal validPrincipal);
+
+ /**
+ * Retrieves the {@link
org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal} for the given
{@code oakPath}
+ * and returns it if it is considered valid by the {@code Filter}
implementation. Otherwise this method returns
+ * {@code null}.
+ *
+ * @param oakPath A non-null Oak path pointing to an {@link
org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal}.
+ * @return A valid principal or {@code null} if no valid principal can be
retrieved/exists for the given path.
+ */
+ @Nullable
+ Principal getValidPrincipal(@NotNull String oakPath);
+
+}
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/Filter.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/FilterProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/FilterProvider.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/FilterProvider.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/FilterProvider.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,59 @@
+/*
+ * 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.spi.security.authorization.principalbased;
+
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.jetbrains.annotations.NotNull;
+import org.osgi.annotation.versioning.ProviderType;
+
+/**
+ * Interface that allows to define the principals for which principal based
access control management and permission
+ * evaluation can be executed. For any other principals this module would
never take effect.
+ */
+@ProviderType
+public interface FilterProvider {
+
+ /**
+ * Reveals if the given implementation is able to handle access control at
the tree defined by the given {@code oakPath}.
+ *
+ * @param absPath The absolute oak path to be tested.
+ * @return {@code true} if the given path is supported by this
implememntation, {@code false} otherwise.
+ */
+ boolean handlesPath(@NotNull String oakPath);
+
+ /**
+ * Returns the root path of handled by the filer. In case multiple paths
are supported this method returns the common
+ * ancestor path.
+ *
+ * @return An absolute oak path.
+ */
+ @NotNull
+ String getFilterRoot();
+
+ /**
+ * Returns the {@link Filter} associated with this provider implementation.
+ *
+ * @param securityProvider The security provider.
+ * @param root The reading/editing root.
+ * @param namePathMapper The name path mapper.
+ * @return A new filter associated with the given parameters.
+ */
+ @NotNull
+ Filter getFilter(@NotNull SecurityProvider securityProvider, @NotNull Root
root, @NotNull NamePathMapper namePathMapper);
+}
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/FilterProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/PrincipalPolicy.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/PrincipalPolicy.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/PrincipalPolicy.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/PrincipalPolicy.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,46 @@
+/*
+ * 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.spi.security.authorization.principalbased;
+
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.osgi.annotation.versioning.ProviderType;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.security.Privilege;
+import java.security.Principal;
+import java.util.Map;
+
+@ProviderType
+public interface PrincipalPolicy extends JackrabbitAccessControlList {
+
+ @NotNull
+ Principal getPrincipal();
+
+ boolean addEntry(@NotNull String effectivePath, @NotNull Privilege[]
privileges) throws RepositoryException;
+
+ boolean addEntry(@NotNull String effectivePath, @NotNull Privilege[]
privileges, @NotNull Map<String, Value> restrictions, @NotNull Map<String,
Value[]> mvRestrictions) throws RepositoryException;
+
+ interface Entry extends JackrabbitAccessControlEntry {
+
+ @Nullable
+ String getEffectivePath();
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/PrincipalPolicy.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractTreePermission.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractTreePermission.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractTreePermission.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractTreePermission.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,85 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.tree.TreeType;
+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.jetbrains.annotations.NotNull;
+
+abstract class AbstractTreePermission implements TreePermission {
+
+ private final Tree tree;
+ private final TreeType type;
+
+ AbstractTreePermission(@NotNull Tree tree, @NotNull TreeType type) {
+ this.tree = tree;
+ this.type = type;
+ }
+
+ abstract PrincipalBasedPermissionProvider getPermissionProvider();
+
+ @NotNull
+ Tree getTree() {
+ return tree;
+ }
+
+ @NotNull
+ TreeType getType() {
+ return type;
+ }
+
+ @Override
+ public @NotNull TreePermission getChildPermission(@NotNull String
childName, @NotNull NodeState childState) {
+ return getPermissionProvider().getTreePermission(childName,
childState, this);
+ }
+
+ @Override
+ public boolean canRead() {
+ long permission = (type == TreeType.ACCESS_CONTROL) ?
Permissions.READ_ACCESS_CONTROL : Permissions.READ_NODE;
+ return getPermissionProvider().isGranted(tree, null, permission);
+ }
+
+ @Override
+ public boolean canRead(@NotNull PropertyState property) {
+ long permission = (type == TreeType.ACCESS_CONTROL) ?
Permissions.READ_ACCESS_CONTROL : Permissions.READ_PROPERTY;
+ return getPermissionProvider().isGranted(tree, property, permission);
+ }
+
+ @Override
+ public boolean canReadAll() {
+ return false;
+ }
+
+ @Override
+ public boolean canReadProperties() {
+ return false;
+ }
+
+ @Override
+ public boolean isGranted(long permissions) {
+ return getPermissionProvider().isGranted(tree, null, permissions);
+ }
+
+ @Override
+ public boolean isGranted(long permissions, @NotNull PropertyState
property) {
+ return getPermissionProvider().isGranted(tree, property, permissions);
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/AbstractTreePermission.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/Constants.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/Constants.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/Constants.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/Constants.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,72 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+interface Constants {
+
+ /**
+ * The name of the mixin type that defines the principal based access
control policy node.
+ */
+ String MIX_REP_PRINCIPAL_BASED_MIXIN = "rep:PrincipalBasedMixin";
+
+ /**
+ * The primary node type name of the principal based access control policy
node.
+ */
+ String NT_REP_PRINCIPAL_POLICY = "rep:PrincipalPolicy";
+
+ /**
+ * The primary node type name of the entries inside the principal based
access control policy node.
+ */
+ String NT_REP_PRINCIPAL_ENTRY = "rep:PrincipalEntry";
+
+ /**
+ * The primary node type name of the restrictions node associated with
entries inside the principal based access control policy node.
+ */
+ String NT_REP_RESTRICTIONS = "rep:Restrictions";
+
+ /**
+ * The name of the principal based access control policy node.
+ */
+ String REP_PRINCIPAL_POLICY = "rep:principalPolicy";
+
+ /**
+ * The name of the mandatory principal name property associated with the
principal based access control policy.
+ */
+ String REP_PRINCIPAL_NAME = "rep:principalName";
+
+ /**
+ * The name of the mandatory path property of a given entry in a principal
based access control policy.
+ * It will store an absolute path or empty string for the repository-level
+ */
+ String REP_EFFECTIVE_PATH = "rep:effectivePath";
+
+ /**
+ * The name of the mandatory principal property of a given entry in a
principal based access control policy.
+ */
+ String REP_PRIVILEGES = "rep:privileges";
+
+ /**
+ * The name of the optional restriction node associated with a given entry
in a principal based access control policy.
+ */
+ String REP_RESTRICTIONS = "rep:restrictions";
+
+ /**
+ * Value to be used for the {@code rep:effectivePath} property in case of
repository level permissions (analog to passing
+ * null to {@code AccessControlManager.getEffectivePolicies(String)}.
+ */
+ String REPOSITORY_PERMISSION_PATH = "";
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/Constants.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ContextImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ContextImpl.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ContextImpl.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ContextImpl.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,104 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import org.apache.jackrabbit.oak.spi.security.Context;
+import org.jetbrains.annotations.NotNull;
+
+final class ContextImpl implements Context, Constants {
+
+ private ContextImpl(){}
+
+ static final Context INSTANCE = new ContextImpl();
+
+ private static final String[] NODE_NAMES = new String[]
{REP_PRINCIPAL_POLICY, REP_RESTRICTIONS};
+ private static final String[] PROPERTY_NAMES = new String[]
{REP_PRINCIPAL_NAME, REP_EFFECTIVE_PATH, REP_PRIVILEGES};
+ private static final String[] NT_NAMES = new String[]
{NT_REP_PRINCIPAL_POLICY, NT_REP_PRINCIPAL_ENTRY, NT_REP_RESTRICTIONS};
+
+ //------------------------------------------------------------< Context
>---
+ @Override
+ public boolean definesProperty(@NotNull Tree parent, @NotNull
PropertyState property) {
+ return definesTree(parent);
+ }
+
+ @Override
+ public boolean definesContextRoot(@NotNull Tree tree) {
+ return Utils.isPrincipalPolicyTree(tree);
+ }
+
+ @Override
+ public boolean definesTree(@NotNull Tree tree) {
+ return tree.exists() && (isNodeName(tree.getName()) || isNtName(tree));
+ }
+
+ @Override
+ public boolean definesLocation(@NotNull TreeLocation location) {
+ PropertyState p = location.getProperty();
+ Tree tree = (p == null) ? location.getTree() :
location.getParent().getTree();
+ if (tree != null) {
+ return (p == null) ? definesTree(tree) : definesProperty(tree, p);
+ } else {
+ if (isItemName(location.getName())) {
+ return true;
+ }
+ TreeLocation parent = location.getParent();
+ String parentName = parent.getName();
+ return REP_PRINCIPAL_POLICY.equals(parentName) ||
REP_RESTRICTIONS.equals(parentName);
+ }
+ }
+
+ @Override
+ public boolean definesInternal(@NotNull Tree tree) {
+ return false;
+ }
+
+ private static boolean isNodeName(@NotNull String name) {
+ for (String n : NODE_NAMES) {
+ if (n.equals(name)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean isPropertyName(@NotNull String name) {
+ for (String n : PROPERTY_NAMES) {
+ if (n.equals(name)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private static boolean isItemName(@NotNull String name) {
+ return isNodeName(name) || isPropertyName(name);
+ }
+
+ private static boolean isNtName(@NotNull Tree tree) {
+ String ntName = TreeUtil.getPrimaryTypeName(tree);
+ for (String n : NT_NAMES) {
+ if (n.equals(ntName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/ContextImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryCache.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryCache.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryCache.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryCache.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,117 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import com.google.common.base.Strings;
+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.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionPattern;
+import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
+import org.apache.jackrabbit.util.Text;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+class EntryCache implements Constants {
+
+ private final RestrictionProvider restrictionProvider;
+ private final PrivilegeBitsProvider bitsProvider;
+
+ /**
+ * Mapping effective path (empty string representing the null path) to the
permission entries defined for each
+ * effective path. Note that this map does not record the name or nature
(group vs non-group) of the principal for
+ * which the entries have been defined. Similarly it ignores the order of
entries as the implementation only
+ * supports 'allow' entries.
+ */
+ private final Map<String, List<PermissionEntry>> entries = new HashMap<>();
+
+ EntryCache(@NotNull Root root, @NotNull Iterable<String> principalPathSet,
@NotNull RestrictionProvider restrictionProvider) {
+ this.restrictionProvider = restrictionProvider;
+ this.bitsProvider = new PrivilegeBitsProvider(root);
+
+ for (String principalPath : principalPathSet) {
+ Tree policyTree = root.getTree(PathUtils.concat(principalPath,
Constants.REP_PRINCIPAL_POLICY));
+ if (!policyTree.exists()) {
+ continue;
+ }
+ for (Tree child : policyTree.getChildren()) {
+ if
(Constants.NT_REP_PRINCIPAL_ENTRY.equals(TreeUtil.getPrimaryTypeName(child))) {
+ PermissionEntryImpl entry = new PermissionEntryImpl(child);
+ String key = Strings.nullToEmpty(entry.effectivePath);
+ List<PermissionEntry> list = entries.computeIfAbsent(key,
k -> new ArrayList<>());
+ list.add(entry);
+ }
+ }
+ }
+ }
+
+ @NotNull
+ Iterator<PermissionEntry> getEntries(@NotNull String path) {
+ Iterable<PermissionEntry> list = entries.get(path);
+ return (list == null) ? Collections.emptyIterator() : list.iterator();
+ }
+
+ private final class PermissionEntryImpl implements PermissionEntry {
+
+ private final String effectivePath;
+ private final PrivilegeBits privilegeBits;
+ private RestrictionPattern pattern;
+
+ private PermissionEntryImpl(@NotNull Tree entryTree) {
+ effectivePath = Strings.emptyToNull(TreeUtil.getString(entryTree,
REP_EFFECTIVE_PATH));
+ privilegeBits =
bitsProvider.getBits(entryTree.getProperty(REP_PRIVILEGES).getValue(Type.NAMES));
+ pattern = restrictionProvider.getPattern(effectivePath,
restrictionProvider.readRestrictions(effectivePath, entryTree));
+ }
+
+ @NotNull
+ public PrivilegeBits getPrivilegeBits() {
+ return privilegeBits;
+ }
+
+ @Override
+ public boolean appliesTo(@NotNull String path) {
+ return Text.isDescendantOrEqual(effectivePath, path);
+ }
+
+ @Override
+ public boolean matches(@NotNull Tree tree, @Nullable PropertyState
property) {
+ return pattern.matches(tree, property);
+ }
+
+ @Override
+ public boolean matches(@NotNull String treePath) {
+ return pattern.matches(treePath);
+ }
+
+ @Override
+ public boolean matches() {
+ return pattern.matches();
+ }
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryCache.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryIterator.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryIterator.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryIterator.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryIterator.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,72 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import com.google.common.base.Predicate;
+import org.apache.jackrabbit.commons.iterator.AbstractLazyIterator;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collections;
+import java.util.Iterator;
+
+final class EntryIterator extends AbstractLazyIterator<PermissionEntry> {
+
+ private final Predicate<PermissionEntry> predicate;
+ private final EntryCache entryCache;
+
+ // initially set to empty-iterator to trigger reading entries from the
cache
+ private Iterator<PermissionEntry> nextEntries =
Collections.emptyIterator();
+
+ // the next oak path for which to retrieve permission entries
+ private String nextPath;
+
+ EntryIterator(@NotNull String path, @NotNull Predicate<PermissionEntry>
predicate, @NotNull EntryCache entryCache) {
+ this.nextPath = path;
+ this.predicate = predicate;
+ this.entryCache = entryCache;
+ }
+
+ @Override
+ protected PermissionEntry getNext() {
+ PermissionEntry next = null;
+ while (next == null) {
+ if (nextEntries.hasNext()) {
+ PermissionEntry pe = nextEntries.next();
+ if (predicate.apply(pe)) {
+ next = pe;
+ }
+ } else {
+ // stop the iteration if entries for the root node have
already been processed
+ if (nextPath == null) {
+ break;
+ }
+ // obtain entries from the next path in the hierarchy
+ nextEntries = entryCache.getEntries(nextPath);
+ nextPath = getParentPathOrNull(nextPath);
+ }
+ }
+ return next;
+ }
+
+ @Nullable
+ private static String getParentPathOrNull(@NotNull String path) {
+ String parentPath = PathUtils.getParentPath(path);
+ return (path.equals(parentPath)) ? null : parentPath;
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryIterator.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryPredicate.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryPredicate.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryPredicate.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryPredicate.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,84 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.commons.PathUtils;
+import
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+final class EntryPredicate {
+
+ private EntryPredicate() {}
+
+ @NotNull
+ static Predicate<PermissionEntry> create(@Nullable String oakPath) {
+ if (oakPath == null) {
+ return permissionEntry -> permissionEntry.matches();
+ } else {
+ return permissionEntry -> permissionEntry.matches(oakPath);
+ }
+ }
+
+ @NotNull
+ static Predicate<PermissionEntry> create(@NotNull Tree tree, @Nullable
PropertyState property) {
+ if (!tree.exists()) {
+ // target node does not exist (anymore) in this workspace
+ // use best effort calculation based on the item path.
+ String predicatePath = (property == null) ? tree.getPath() :
PathUtils.concat(tree.getPath(), property.getName());
+ return create(predicatePath);
+ } else {
+ return permissionEntry -> permissionEntry.matches(tree, property);
+ }
+ }
+
+ @NotNull
+ static Predicate<PermissionEntry> createParent(@NotNull String treePath,
@Nullable Tree parentTree, long permissions) {
+ if (!Permissions.respectParentPermissions(permissions)) {
+ return Predicates.alwaysFalse();
+ }
+ if (treePath.isEmpty() || PathUtils.denotesRoot(treePath)) {
+ return Predicates.alwaysFalse();
+ } else if (parentTree != null && parentTree.exists()) {
+ return permissionEntry ->
permissionEntry.appliesTo(parentTree.getPath()) &&
permissionEntry.matches(parentTree, null);
+ } else {
+ String parentPath = PathUtils.getParentPath(treePath);
+ return permissionEntry -> permissionEntry.appliesTo(parentPath) &&
permissionEntry.matches(parentPath);
+ }
+ }
+
+ @NotNull
+ static Predicate<PermissionEntry> createParent(@NotNull Tree tree, long
permissions) {
+ if (!Permissions.respectParentPermissions(permissions)) {
+ return Predicates.alwaysFalse();
+ }
+ if (!tree.exists()) {
+ return createParent(tree.getPath(), tree.getParent(), permissions);
+ } else {
+ if (!tree.isRoot()) {
+ Tree parentTree = tree.getParent();
+ return permissionEntry ->
permissionEntry.appliesTo(parentTree.getPath()) &&
permissionEntry.matches(parentTree, null);
+ } else {
+ return Predicates.alwaysFalse();
+ }
+ }
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/EntryPredicate.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterProviderImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterProviderImpl.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterProviderImpl.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterProviderImpl.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,205 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import com.google.common.collect.Maps;
+import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.Filter;
+import
org.apache.jackrabbit.oak.spi.security.authorization.principalbased.FilterProvider;
+import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration;
+import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
+import org.apache.jackrabbit.oak.spi.security.principal.SystemUserPrincipal;
+import org.apache.jackrabbit.util.Text;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Modified;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.RepositoryException;
+import java.security.Principal;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Implementation of the {@link
org.apache.jackrabbit.spi.security.authorization.principalbased.Filter}
interface that
+ * consists of the following two filtering conditions:
+ *
+ * <ol>
+ * <li>All principals in the set must be of type {@link
org.apache.jackrabbit.oak.spi.security.principal.SystemUserPrincipal}</li>
+ * <li>All principals in the set must be located in the repository below
the configured path.</li>
+ * </ol>
+ */
+@Component(service = {FilterProvider.class})
+@Designate(ocd = FilterProviderImpl.Configuration.class)
+public class FilterProviderImpl implements FilterProvider {
+
+ @ObjectClassDefinition(name = "Apache Jackrabbit Oak Filter for Principal
Based Authorization")
+ @interface Configuration {
+ @AttributeDefinition(
+ name = "Path",
+ description = "Required path underneath which all filtered
principals must be located in the repository.")
+ String path();
+ }
+
+ private static final Logger log =
LoggerFactory.getLogger(FilterProviderImpl.class);
+
+ private String oakPath;
+
+ private final Map<String, String> validatedPrincipalNamesPathMap =
Maps.newConcurrentMap();
+
+ //-----------------------------------------------------< FilterProvider
>---
+
+ @Override
+ public boolean handlesPath(@NotNull String oakPath) {
+ return Text.isDescendantOrEqual(this.oakPath, oakPath);
+ }
+
+ @NotNull
+ @Override
+ public String getFilterRoot() {
+ return oakPath;
+ }
+
+ @NotNull
+ @Override
+ public Filter getFilter(@NotNull SecurityProvider securityProvider,
@NotNull Root root, @NotNull NamePathMapper namePathMapper) {
+ PrincipalProvider principalProvider =
securityProvider.getConfiguration(PrincipalConfiguration.class).getPrincipalProvider(root,
namePathMapper);
+ return new FilterImpl(root, principalProvider, namePathMapper);
+ }
+
+ //----------------------------------------------------< SCR Integration
>---
+
+ @Activate
+ protected void activate(Configuration configuration, Map<String, Object>
properties) {
+ setPath(configuration);
+ }
+
+ @Modified
+ protected void modified(Configuration configuration, Map<String, Object>
properties) {
+ setPath(configuration);
+ }
+
+ private void setPath(@NotNull Configuration configuration) {
+ this.oakPath = configuration.path();
+ }
+
+ //-------------------------------------------------------------< Filter
>---
+
+ private final class FilterImpl implements Filter {
+
+ private final Root root;
+ private final PrincipalProvider principalProvider;
+ private final NamePathMapper namePathMapper;
+
+ private FilterImpl(@NotNull Root root, @NotNull PrincipalProvider
principalProvider, @NotNull NamePathMapper namePathMapper) {
+ this.root = root;
+ this.principalProvider = principalProvider;
+ this.namePathMapper = namePathMapper;
+ }
+
+ @Override
+ public boolean canHandle(@NotNull Set<Principal> principals) {
+ if (principals.isEmpty()) {
+ return false;
+ }
+ for (Principal p : principals) {
+ if (!isValidPrincipal(p)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ @NotNull
+ public String getOakPath(@NotNull Principal validPrincipal) {
+ String principalPath =
validatedPrincipalNamesPathMap.get(validPrincipal.getName());
+ if (principalPath == null) {
+ throw new IllegalArgumentException("Invalid principal " +
validPrincipal.getName());
+ }
+ return principalPath;
+ }
+
+ @Override
+ @Nullable
+ public Principal getValidPrincipal(@NotNull String oakPath) {
+ ItemBasedPrincipal principal =
principalProvider.getItemBasedPrincipal(oakPath);
+ if (principal != null && isValidPrincipal(principal)) {
+ return principal;
+ } else {
+ return null;
+ }
+ }
+
+ private boolean isValidPrincipal(@NotNull Principal principal) {
+ if (!(principal instanceof SystemUserPrincipal)) {
+ return false;
+ }
+
+ String principalName = principal.getName();
+ if (validatedPrincipalNamesPathMap.containsKey(principalName)) {
+ return true;
+ }
+
+ String principalPath = getPrincipalPath(principal);
+ if (principalPath != null && handlesPath(principalPath)) {
+ validatedPrincipalNamesPathMap.put(principalName,
principalPath);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Nullable
+ private String getPrincipalPath(@NotNull Principal principal) {
+ String prinicpalOakPath = null;
+ if (principal instanceof ItemBasedPrincipal) {
+ prinicpalOakPath = getOakPath((ItemBasedPrincipal) principal);
+ }
+ if (prinicpalOakPath == null ||
!root.getTree(prinicpalOakPath).exists()) {
+ // given principal is not ItemBasedPrincipal or it has been
obtained with a different name-path-mapper
+ // making the conversion to oak-path return null -> try
obtaining principal by name
+ Principal p =
principalProvider.getPrincipal(principal.getName());
+ if (p instanceof ItemBasedPrincipal) {
+ prinicpalOakPath = getOakPath((ItemBasedPrincipal) p);
+ } else {
+ prinicpalOakPath = null;
+ }
+ }
+ return prinicpalOakPath;
+ }
+
+ @Nullable
+ private String getOakPath(@NotNull ItemBasedPrincipal principal) {
+ try {
+ return namePathMapper.getOakPath(principal.getPath());
+ } catch (RepositoryException e) {
+ log.error("Error while retrieving path from ItemBasedPrincipal
{}, {}", principal.getName(), e.getMessage());
+ return null;
+ }
+ }
+ }
+}
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/FilterProviderImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProvider.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProvider.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProvider.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,64 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
+import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.spi.security.Context;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
+import org.jetbrains.annotations.NotNull;
+
+interface MgrProvider {
+
+ @NotNull
+ SecurityProvider getSecurityProvider();
+
+ void reset(@NotNull Root root, NamePathMapper namePathMapper);
+
+ @NotNull
+ Root getRoot();
+
+ @NotNull
+ NamePathMapper getNamePathMapper();
+
+ @NotNull
+ Context getContext();
+
+ @NotNull
+ PrivilegeManager getPrivilegeManager();
+
+ @NotNull
+ PrivilegeBitsProvider getPrivilegeBitsProvider();
+
+ @NotNull
+ PrincipalManager getPrincipalManager();
+
+ @NotNull
+ RestrictionProvider getRestrictionProvider();
+
+ @NotNull
+ TreeProvider getTreeProvider();
+
+ @NotNull
+ RootProvider getRootProvider();
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImpl.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImpl.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImpl.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,154 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
+import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.spi.security.Context;
+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.restriction.RestrictionProvider;
+import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConfiguration;
+import org.jetbrains.annotations.NotNull;
+
+import static com.google.common.base.Preconditions.checkState;
+
+final class MgrProviderImpl implements MgrProvider {
+
+ private final PrincipalBasedAuthorizationConfiguration config;
+
+ private NamePathMapper namePathMapper;
+ private Root root;
+ private Context ctx;
+ private RestrictionProvider restrictionProvider;
+ private PrincipalManager principalManager;
+ private PrivilegeManager privilegeManager;
+ private PrivilegeBitsProvider privilegeBitsProvider;
+
+ MgrProviderImpl(@NotNull PrincipalBasedAuthorizationConfiguration config) {
+ this.config = config;
+ this.namePathMapper = NamePathMapper.DEFAULT;
+ }
+
+ MgrProviderImpl(@NotNull PrincipalBasedAuthorizationConfiguration config,
@NotNull Root root, @NotNull NamePathMapper namePathMapper) {
+ this.config = config;
+ reset(root, namePathMapper);
+ }
+
+ @NotNull
+ @Override
+ public SecurityProvider getSecurityProvider() {
+ return config.getSecurityProvider();
+ }
+
+ @Override
+ public void reset(@NotNull Root root, NamePathMapper namePathMapper) {
+ this.root = root;
+ this.namePathMapper = namePathMapper;
+
+ this.ctx = null;
+ this.restrictionProvider = null;
+ this.principalManager = null;
+ this.privilegeManager = null;
+ this.privilegeBitsProvider = null;
+ }
+
+ @NotNull
+ @Override
+ public Root getRoot() {
+ checkRootInitialized();
+ return root;
+ }
+
+ @NotNull
+ @Override
+ public NamePathMapper getNamePathMapper() {
+ return namePathMapper;
+ }
+
+ @NotNull
+ @Override
+ public Context getContext() {
+ if (ctx == null) {
+ // make sure the context allows to reveal any kind of protected
access control/permission content not just
+ // those defined by this module.
+ ctx =
getSecurityProvider().getConfiguration(AuthorizationConfiguration.class).getContext();
+ }
+ return ctx;
+ }
+
+ @NotNull
+ @Override
+ public PrivilegeManager getPrivilegeManager() {
+ checkRootInitialized();
+ if (privilegeManager == null) {
+ privilegeManager =
getSecurityProvider().getConfiguration(PrivilegeConfiguration.class).getPrivilegeManager(root,
namePathMapper);
+ }
+ return privilegeManager;
+ }
+
+ @NotNull
+ @Override
+ public PrivilegeBitsProvider getPrivilegeBitsProvider() {
+ checkRootInitialized();
+ if (privilegeBitsProvider == null) {
+ privilegeBitsProvider = new PrivilegeBitsProvider(root);
+ }
+ return privilegeBitsProvider;
+ }
+
+ @NotNull
+ @Override
+ public PrincipalManager getPrincipalManager() {
+ checkRootInitialized();
+ if (principalManager == null) {
+ principalManager =
getSecurityProvider().getConfiguration(PrincipalConfiguration.class).getPrincipalManager(root,
namePathMapper);
+ }
+ return principalManager;
+ }
+
+ @NotNull
+ @Override
+ public RestrictionProvider getRestrictionProvider() {
+ if (restrictionProvider == null) {
+ restrictionProvider =
getSecurityProvider().getConfiguration(AuthorizationConfiguration.class).getRestrictionProvider();
+ }
+ return restrictionProvider;
+ }
+
+ @NotNull
+ @Override
+ public TreeProvider getTreeProvider() {
+ return config.getTreeProvider();
+ }
+
+ @NotNull
+ @Override
+ public RootProvider getRootProvider() {
+ return config.getRootProvider();
+ }
+
+ private void checkRootInitialized() {
+ checkState(root != null);
+ }
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/MgrProviderImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionEntry.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionEntry.java?rev=1857551&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionEntry.java
(added)
+++
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionEntry.java
Mon Apr 15 07:16:49 2019
@@ -0,0 +1,36 @@
+/*
+ * 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.spi.security.authorization.principalbased.impl;
+
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+interface PermissionEntry {
+
+ PrivilegeBits getPrivilegeBits();
+
+ boolean appliesTo(@NotNull String path);
+
+ boolean matches(@NotNull String oakPath);
+
+ boolean matches(@NotNull Tree tree, @Nullable PropertyState property);
+
+ boolean matches();
+}
\ No newline at end of file
Propchange:
jackrabbit/oak/trunk/oak-authorization-principalbased/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/principalbased/impl/PermissionEntry.java
------------------------------------------------------------------------------
svn:eol-style = native