You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2013/09/12 11:09:28 UTC

svn commit: r1522494 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction: CompositeRestrictionProvider.java RestrictionProvider.java

Author: angela
Date: Thu Sep 12 09:09:27 2013
New Revision: 1522494

URL: http://svn.apache.org/r1522494
Log:
OAK-51 : Access Control Management

- composite restrictions

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java?rev=1522494&r1=1522493&r2=1522494&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/CompositeRestrictionProvider.java Thu Sep 12 09:09:27 2013
@@ -27,6 +27,7 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 import javax.jcr.security.AccessControlException;
 
+import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.Tree;
 
@@ -38,12 +39,16 @@ public class CompositeRestrictionProvide
 
     private final Collection<? extends RestrictionProvider> providers;
 
-    private CompositeRestrictionProvider(Collection<? extends RestrictionProvider> providers) {
-        this.providers = providers;
+    private CompositeRestrictionProvider(@Nonnull Collection<? extends RestrictionProvider> providers) {
+        this.providers = ImmutableSet.copyOf(providers);
     }
 
-    public static RestrictionProvider newInstance(Collection<? extends RestrictionProvider> providers) {
-        return new CompositeRestrictionProvider(providers);
+    public static RestrictionProvider newInstance(@Nonnull Collection<? extends RestrictionProvider> providers) {
+        switch (providers.size()) {
+            case 0: return EMPTY;
+            case 1: return providers.iterator().next();
+            default: return new CompositeRestrictionProvider(providers);
+        }
     }
 
     @Nonnull

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java?rev=1522494&r1=1522493&r2=1522494&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/restriction/RestrictionProvider.java Thu Sep 12 09:09:27 2013
@@ -16,6 +16,7 @@
  */
 package org.apache.jackrabbit.oak.spi.security.authorization.restriction;
 
+import java.util.Collections;
 import java.util.Set;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -129,4 +130,51 @@ public interface RestrictionProvider {
      */
     @Nonnull
     RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree);
+
+    /**
+     * Empty restriction provider implementation that doesn't support any
+     * restrictions.
+     */
+    RestrictionProvider EMPTY = new RestrictionProvider() {
+
+        @Nonnull
+        @Override
+        public Set<RestrictionDefinition> getSupportedRestrictions(@Nullable String oakPath) {
+            return Collections.emptySet();
+        }
+
+        @Nonnull
+        @Override
+        public Restriction createRestriction(@Nullable String oakPath, @Nonnull String oakName, @Nonnull Value value) throws AccessControlException, RepositoryException {
+            throw new AccessControlException("This implementation doesn't support any restrictions");
+        }
+
+        @Nonnull
+        @Override
+        public Restriction createRestriction(@Nullable String oakPath, @Nonnull String oakName, @Nonnull Value... values) throws AccessControlException, RepositoryException {
+            throw new AccessControlException("This implementation doesn't support any restrictions");
+        }
+
+        @Nonnull
+        @Override
+        public Set<Restriction> readRestrictions(@Nullable String oakPath, @Nonnull Tree aceTree) {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public void writeRestrictions(String oakPath, Tree aceTree, Set<Restriction> restrictions) {
+            // nothing to do
+        }
+
+        @Override
+        public void validateRestrictions(@Nullable String oakPath, @Nonnull Tree aceTree) {
+            // nothing to do
+        }
+
+        @Nonnull
+        @Override
+        public RestrictionPattern getPattern(@Nullable String oakPath, @Nonnull Tree tree) {
+            return RestrictionPattern.EMPTY;
+        }
+    };
 }