You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2006/12/07 18:57:52 UTC

svn commit: r483573 - in /lenya/trunk/src: impl/test/org/apache/lenya/ac/impl/ impl/test/org/apache/lenya/transaction/ java/org/apache/lenya/ac/ java/org/apache/lenya/cms/ac/ modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/ modules-core/ac-impl/...

Author: andreas
Date: Thu Dec  7 09:57:48 2006
New Revision: 483573

URL: http://svn.apache.org/viewvc?view=rev&rev=483573
Log:
Added logger to Identity constructor, added utility method to resolve users with a certain role, use it in Publish usecase for notification

Modified:
    lenya/trunk/src/impl/test/org/apache/lenya/ac/impl/AbstractAccessControlTest.java
    lenya/trunk/src/impl/test/org/apache/lenya/transaction/TransactionTest.java
    lenya/trunk/src/java/org/apache/lenya/ac/Identity.java
    lenya/trunk/src/java/org/apache/lenya/cms/ac/PolicyUtil.java
    lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/IdentityTest.java
    lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/PolicyManagerTest.java
    lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java

Modified: lenya/trunk/src/impl/test/org/apache/lenya/ac/impl/AbstractAccessControlTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/lenya/ac/impl/AbstractAccessControlTest.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/impl/test/org/apache/lenya/ac/impl/AbstractAccessControlTest.java (original)
+++ lenya/trunk/src/impl/test/org/apache/lenya/ac/impl/AbstractAccessControlTest.java Thu Dec  7 09:57:48 2006
@@ -149,8 +149,7 @@
         User user = controller.getAccreditableManager().getUserManager().getUser(USERNAME);
         assertNotNull(user);
 
-        Identity identity = new Identity();
-        identity.enableLogging(getLogger());
+        Identity identity = new Identity(getLogger());
         identity.addIdentifiable(user);
 
         return identity;

Modified: lenya/trunk/src/impl/test/org/apache/lenya/transaction/TransactionTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/impl/test/org/apache/lenya/transaction/TransactionTest.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/impl/test/org/apache/lenya/transaction/TransactionTest.java (original)
+++ lenya/trunk/src/impl/test/org/apache/lenya/transaction/TransactionTest.java Thu Dec  7 09:57:48 2006
@@ -24,12 +24,10 @@
 
     public void testTransaction() throws TransactionException {
 
-        Identity lenya = new Identity();
-        lenya.enableLogging(getLogger());
+        Identity lenya = new Identity(getLogger());
         lenya.addIdentifiable(new MockUser("lenya"));
 
-        Identity alice = new Identity();
-        alice.enableLogging(getLogger());
+        Identity alice = new Identity(getLogger());
         alice.addIdentifiable(new MockUser("alice"));
 
         IdentityMap lenyaMap = new IdentityMapImpl(getLogger());

Modified: lenya/trunk/src/java/org/apache/lenya/ac/Identity.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/ac/Identity.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/ac/Identity.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/ac/Identity.java Thu Dec  7 09:57:48 2006
@@ -28,7 +28,9 @@
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 
+import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.avalon.framework.logger.Logger;
 import org.apache.cocoon.environment.Session;
 
 /**
@@ -43,9 +45,10 @@
 
     /**
      * Ctor.
+     * @param logger The logger.
      */
-    public Identity() {
-	    // do nothing
+    public Identity(Logger logger) {
+        ContainerUtil.enableLogging(this, logger);
     }
     
     /**

Modified: lenya/trunk/src/java/org/apache/lenya/cms/ac/PolicyUtil.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/java/org/apache/lenya/cms/ac/PolicyUtil.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/java/org/apache/lenya/cms/ac/PolicyUtil.java (original)
+++ lenya/trunk/src/java/org/apache/lenya/cms/ac/PolicyUtil.java Thu Dec  7 09:57:48 2006
@@ -18,40 +18,108 @@
 
 package org.apache.lenya.cms.ac;
 
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.List;
 
+import org.apache.avalon.framework.logger.Logger;
+import org.apache.avalon.framework.service.ServiceException;
+import org.apache.avalon.framework.service.ServiceManager;
+import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.environment.Request;
 import org.apache.lenya.ac.AccessControlException;
+import org.apache.lenya.ac.AccessController;
+import org.apache.lenya.ac.AccessControllerResolver;
+import org.apache.lenya.ac.AccreditableManager;
+import org.apache.lenya.ac.Identity;
+import org.apache.lenya.ac.PolicyManager;
 import org.apache.lenya.ac.Role;
+import org.apache.lenya.ac.User;
+import org.apache.lenya.ac.UserManager;
 
 /**
  * Policy utility class.
  */
-public class PolicyUtil {
+public final class PolicyUtil {
 
     /**
      * Fetches the stored roles from the request.
      * @param request The request.
      * @return A role array.
-     * @throws AccessControlException If the request does not contain the roles list.
+     * @throws AccessControlException If the request does not contain the roles
+     *         list.
      */
-    public static Role[] getRoles(Request request) throws AccessControlException {
+    public static final Role[] getRoles(Request request) throws AccessControlException {
         List roleList = (List) request.getAttribute(Role.class.getName());
 
         if (roleList == null) {
             StringBuffer buf = new StringBuffer();
             buf.append("    URI: [" + request.getRequestURI() + "]\n");
-            for (Enumeration e = request.getParameterNames(); e.hasMoreElements(); ) {
+            for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
                 String key = (String) e.nextElement();
                 buf.append("    Parameter: [" + key + "] = [" + request.getParameter(key) + "]\n");
             }
-            
-            throw new AccessControlException("Request [" + request + "] does not contain roles: \n" + buf.toString());
+
+            throw new AccessControlException("Request [" + request + "] does not contain roles: \n"
+                    + buf.toString());
         }
-        
+
         Role[] roles = (Role[]) roleList.toArray(new Role[roleList.size()]);
         return roles;
+    }
+
+    /**
+     * @param manager The service manager.
+     * @param webappUrl The web application URL.
+     * @param role The ID of the role.
+     * @param logger The logger to use.
+     * @return All users which have the role on this URL.
+     * @throws AccessControlException if an error occurs.
+     */
+    public static final User[] getUsersWithRole(ServiceManager manager, String webappUrl,
+            String role, Logger logger) throws AccessControlException {
+        ServiceSelector selector = null;
+        AccessControllerResolver resolver = null;
+        AccessController controller = null;
+        try {
+            selector = (ServiceSelector) manager.lookup(AccessControllerResolver.ROLE + "Selector");
+            resolver = (AccessControllerResolver) selector
+                    .select(AccessControllerResolver.DEFAULT_RESOLVER);
+            controller = resolver.resolveAccessController(webappUrl);
+
+            AccreditableManager accreditableManager = controller.getAccreditableManager();
+            UserManager userManager = accreditableManager.getUserManager();
+            User[] users = userManager.getUsers();
+            List usersWithRole = new ArrayList();
+            PolicyManager policyManager = controller.getPolicyManager();
+
+            Role roleObject = accreditableManager.getRoleManager().getRole(role);
+
+            for (int i = 0; i < users.length; i++) {
+                Identity identity = new Identity(logger);
+                identity.addIdentifiable(users[i]);
+                Role[] roles = policyManager.getGrantedRoles(accreditableManager, identity,
+                        webappUrl);
+                if (Arrays.asList(roles).contains(roleObject)) {
+                    usersWithRole.add(users[i]);
+                }
+            }
+
+            return (User[]) usersWithRole.toArray(new User[usersWithRole.size()]);
+        } catch (ServiceException e) {
+            throw new AccessControlException(e);
+        } finally {
+            if (selector != null) {
+                if (resolver != null) {
+                    if (controller != null) {
+                        resolver.release(controller);
+                    }
+                    selector.release(resolver);
+                }
+                manager.release(selector);
+            }
+        }
     }
 
 }

Modified: lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/src/org/apache/lenya/ac/impl/DefaultAccessController.java Thu Dec  7 09:57:48 2006
@@ -379,8 +379,7 @@
     public void setupIdentity(Request request) throws AccessControlException {
         Session session = request.getSession(true);
         if (!hasValidIdentity(session)) {
-            Identity identity = new Identity();
-            identity.enableLogging(getLogger());
+            Identity identity = new Identity(getLogger());
             identity.initialize();
             String remoteAddress = request.getRemoteAddr();
             String clientAddress = request.getHeader("x-forwarded-for");

Modified: lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/IdentityTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/IdentityTest.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/IdentityTest.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/IdentityTest.java Thu Dec  7 09:57:48 2006
@@ -37,7 +37,7 @@
      * @throws AccessControlException if an error occurs
      */
     public void testIdentity() throws AccessControlException {
-        Identity identity = new Identity();
+        Identity identity = new Identity(getLogger());
         ContainerUtil.enableLogging(identity, getLogger());
         User user = getAccessController().getAccreditableManager().getUserManager().getUser(USER_ID);
         getLogger().info("Adding user to identity: [" + user + "]");

Modified: lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/PolicyManagerTest.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/PolicyManagerTest.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/PolicyManagerTest.java (original)
+++ lenya/trunk/src/modules-core/ac-impl/java/test/org/apache/lenya/ac/impl/PolicyManagerTest.java Thu Dec  7 09:57:48 2006
@@ -20,10 +20,16 @@
 
 package org.apache.lenya.ac.impl;
 
+import java.util.Arrays;
+import java.util.List;
+
 import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Policy;
 import org.apache.lenya.ac.PolicyManager;
 import org.apache.lenya.ac.Role;
+import org.apache.lenya.ac.User;
+import org.apache.lenya.ac.UserManager;
+import org.apache.lenya.cms.ac.PolicyUtil;
 
 /**
  * Test for the Policy Manager
@@ -36,7 +42,7 @@
      * The test.
      * @throws AccessControlException when something went wrong.
      */
-    public void testAccessController() throws AccessControlException {
+    public void testPolicyManager() throws AccessControlException {
         
         DefaultAccessController controller = getAccessController(); 
         PolicyManager policyManager = controller.getPolicyManager();
@@ -48,6 +54,16 @@
             
             Role[] roles = policyManager.getGrantedRoles(controller.getAccreditableManager(), getIdentity(), URLS[i]);
             assertTrue(roles.length > 0);
+
+            User[] users = PolicyUtil.getUsersWithRole(getManager(), URLS[i], "review", getLogger());
+            
+            UserManager userManager = controller.getAccreditableManager().getUserManager();
+            User lenya = userManager.getUser("lenya");
+            User alice = userManager.getUser("alice");
+            
+            List usersList = Arrays.asList(users);
+            assertFalse(usersList.contains(lenya));
+            assertTrue(usersList.contains(alice));
         }
     }
 

Modified: lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java?view=diff&rev=483573&r1=483572&r2=483573
==============================================================================
--- lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java (original)
+++ lenya/trunk/src/pubs/default/modules/defaultusecases/java/src/org/apache/lenya/defaultpub/cms/usecases/Publish.java Thu Dec  7 09:57:48 2006
@@ -30,8 +30,10 @@
 import org.apache.avalon.framework.service.ServiceSelector;
 import org.apache.cocoon.components.ContextHelper;
 import org.apache.cocoon.environment.Request;
+import org.apache.lenya.ac.AccessControlException;
 import org.apache.lenya.ac.Identifiable;
 import org.apache.lenya.ac.User;
+import org.apache.lenya.cms.ac.PolicyUtil;
 import org.apache.lenya.cms.linking.LinkManager;
 import org.apache.lenya.cms.linking.LinkResolver;
 import org.apache.lenya.cms.linking.LinkTarget;
@@ -92,7 +94,7 @@
         setParameter(SCHEDULE_TIME, format.format(now));
 
         setParameter(SEND_NOTIFICATION, Boolean.TRUE);
-        
+
         setParameter(UNPUBLISHED_LINKS, getUnpublishedLinks());
     }
 
@@ -113,8 +115,7 @@
             }
         } catch (Exception e) {
             throw new RuntimeException(e);
-        }
-        finally {
+        } finally {
             if (linkMgr != null) {
                 this.manager.release(linkMgr);
             }
@@ -151,8 +152,8 @@
     }
 
     /**
-     * Checks if the workflow event is supported and the parent of the document exists in the live
-     * area.
+     * Checks if the workflow event is supported and the parent of the document
+     * exists in the live area.
      * 
      * @see org.apache.lenya.cms.usecase.AbstractUsecase#doCheckPreconditions()
      */
@@ -224,8 +225,8 @@
     }
 
     /**
-     * Returns a link of a certain node, preferrably in the document's language, or
-     * <code>null</code> if the node has no links.
+     * Returns a link of a certain node, preferrably in the document's language,
+     * or <code>null</code> if the node has no links.
      * @param path The path of the node.
      * @param document The document.
      * @return A link or <code>null</code>.
@@ -308,11 +309,13 @@
     }
 
     protected void sendNotification(Document authoringDocument) throws NotificationException,
-            DocumentException {
+            DocumentException, AccessControlException {
         User sender = getSession().getIdentity().getUser();
-        Identifiable[] recipients = { sender };
-        Document liveVersion = authoringDocument.getAreaVersion(Publication.LIVE_AREA);
 
+        Identifiable[] recipients = PolicyUtil.getUsersWithRole(this.manager, authoringDocument
+                .getCanonicalWebappURL(), "review", getLogger());
+
+        Document liveVersion = authoringDocument.getAreaVersion(Publication.LIVE_AREA);
         String url;
 
         Proxy proxy = liveVersion.getPublication().getProxy(liveVersion, false);
@@ -340,7 +343,8 @@
     }
 
     /**
-     * Publishes a document or the subtree below a document, based on the parameter SUBTREE.
+     * Publishes a document or the subtree below a document, based on the
+     * parameter SUBTREE.
      * 
      * @param document The document.
      */



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org