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