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 md...@apache.org on 2013/12/13 17:08:08 UTC

svn commit: r1550757 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java

Author: mduerig
Date: Fri Dec 13 16:08:08 2013
New Revision: 1550757

URL: http://svn.apache.org/r1550757
Log:
OAK-1133: Observation listener PLUS
Push permission evaluation down to ChangeProcessor so it applies to all events being dispatch regardless on how the listener was registered

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java?rev=1550757&r1=1550756&r2=1550757&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/ChangeProcessor.java Fri Dec 13 16:08:08 2013
@@ -35,10 +35,14 @@ import org.apache.jackrabbit.oak.core.Im
 import org.apache.jackrabbit.oak.core.ImmutableTree;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
+import org.apache.jackrabbit.oak.plugins.observation.filter.EventGenerator.Filter;
 import org.apache.jackrabbit.oak.plugins.observation.filter.EventIterator;
+import org.apache.jackrabbit.oak.plugins.observation.filter.FilterBuilder;
 import org.apache.jackrabbit.oak.plugins.observation.filter.FilterProvider;
+import org.apache.jackrabbit.oak.plugins.observation.filter.Filters;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.Observer;
+import org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
 import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
@@ -59,6 +63,7 @@ public class ChangeProcessor implements 
     private final ContentSession contentSession;
     private final NamePathMapper namePathMapper;
     private final ReadOnlyNodeTypeManager ntManager;
+    private final PermissionProvider permissionProvider;
     private final ListenerTracker tracker;
     private final EventListener eventListener;
     private final AtomicReference<FilterProvider> filterProvider;
@@ -72,10 +77,12 @@ public class ChangeProcessor implements 
             ContentSession contentSession,
             NamePathMapper namePathMapper,
             ReadOnlyNodeTypeManager ntManager,
+            PermissionProvider permissionProvider,
             ListenerTracker tracker, FilterProvider filter) {
         this.contentSession = contentSession;
         this.namePathMapper = namePathMapper;
         this.ntManager = ntManager;
+        this.permissionProvider = permissionProvider;
         this.tracker = tracker;
         eventListener = tracker.getTrackedListener();
         filterProvider = new AtomicReference<FilterProvider>(filter);
@@ -123,9 +130,12 @@ public class ChangeProcessor implements 
                 if (provider.includeCommit(contentSession.toString(), info)) {
                     ImmutableTree beforeTree = getTree(previousRoot, provider.getPath());
                     ImmutableTree afterTree = getTree(root, provider.getPath());
+                    Filter userFilter = provider.getFilter(beforeTree, afterTree, ntManager);
+                    Filter acFilter = new FilterBuilder().accessControl(permissionProvider)
+                            .createFilter(beforeTree, afterTree, ntManager);
                     EventIterator<Event> events = new EventIterator<Event>(
                             beforeTree.getNodeState(), afterTree.getNodeState(),
-                            provider.getFilter(beforeTree, afterTree, ntManager),
+                            Filters.all(userFilter, acFilter),
                             new JcrListener(beforeTree, afterTree, namePathMapper, info));
                     if (events.hasNext()) {
                         synchronized (this) {

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java?rev=1550757&r1=1550756&r2=1550757&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ObservationManagerImpl.java Fri Dec 13 16:08:08 2013
@@ -116,7 +116,7 @@ public class ObservationManagerImpl impl
             log.info(OBSERVATION,
                     "Registering event listener {} with filter {}", listener, filterProvider);
             processor = new ChangeProcessor(sessionDelegate.getContentSession(), namePathMapper,
-                    ntMgr, tracker, filterProvider);
+                    ntMgr, permissionProvider, tracker, filterProvider);
             processors.put(listener, processor);
             processor.start(whiteboard);
         } else {
@@ -173,8 +173,7 @@ public class ObservationManagerImpl impl
                 filterBuilder.path(isDeep ? STAR_STAR : STAR),
                 filterBuilder.eventType(eventTypes),
                 filterBuilder.uuid(Selectors.PARENT, uuids),
-                filterBuilder.nodeType(Selectors.PARENT, validateNodeTypeNames(nodeTypeName)),
-                filterBuilder.accessControl(permissionProvider)));
+                filterBuilder.nodeType(Selectors.PARENT, validateNodeTypeNames(nodeTypeName))));
 
         ListenerTracker tracker = new ListenerTracker(
                 listener, eventTypes, absPath, isDeep, uuids, nodeTypeName, noLocal) {