Author: andreas
Date: Fri Aug 10 04:10:57 2007
New Revision: 564551
URL: http://svn.apache.org/viewvc?view=rev&rev=564551
Log:
Extend the UsecaseAuthorizerImpl to check the page access. This is done by a ac.visit pseudo-usecase. For more info, see bug 42952. Thanks a lot to Joern Nettingsmeier for the patch (I applied it because it depended on some changes to the role resolving).
Modified:
lenya/trunk/src/modules-core/usecase/java/src/org/apache/lenya/cms/ac/usecase/impl/UsecaseAuthorizerImpl.java
lenya/trunk/src/pubs/default/config/access-control/usecase-policies.xml
Modified: lenya/trunk/src/modules-core/usecase/java/src/org/apache/lenya/cms/ac/usecase/impl/UsecaseAuthorizerImpl.java
URL: http://svn.apache.org/viewvc/lenya/trunk/src/modules-core/usecase/java/src/org/apache/lenya/cms/ac/usecase/impl/UsecaseAuthorizerImpl.java?view=diff&rev=564551&r1=564550&r2=564551
==============================================================================
--- lenya/trunk/src/modules-core/usecase/java/src/org/apache/lenya/cms/ac/usecase/impl/UsecaseAuthorizerImpl.java (original)
+++ lenya/trunk/src/modules-core/usecase/java/src/org/apache/lenya/cms/ac/usecase/impl/UsecaseAuthorizerImpl.java Fri Aug 10 04:10:57 2007
@@ -52,44 +52,48 @@
* Supported parameters via {@link Parameterizable}:
* </p>
* <ul>
- * <li>
- * {@link #PARAMETER_CONFIGURATION} - location of the usecase policies file
- * (parameterizable for testing purposes)
- * </li>
+ * <li> {@link #PARAMETER_CONFIGURATION} - location of the usecase policies file
+ * (parameterizable for testing purposes) </li>
* </ul>
* @version $Id: UsecaseAuthorizer.java 392449 2006-04-07 23:20:38Z michi $
*/
public class UsecaseAuthorizerImpl extends AbstractLogEnabled implements UsecaseAuthorizer,
Serviceable, Disposable, Parameterizable {
+ /**
+ * The name of the pseudo-usecase that governs access to pages.
+ */
+ public static final String VISIT_USECASE = "ac.visit";
+
protected static final String PARAMETER_CONFIGURATION = "configuration";
protected static final String TYPE = "usecase";
protected static final String USECASE_PARAMETER = "lenya.usecase";
- private static final String AC_CONFIGURATION_FILE
- = "config/access-control/access-control.xml".replace('/', File.separatorChar);
+ private static final String AC_CONFIGURATION_FILE = "config/access-control/access-control.xml"
+ .replace('/', File.separatorChar);
private SourceCache cache;
- /**
- * the configuration URI for this component
- */
+ /**
+ * the configuration URI for this component
+ */
private String configurationUri;
private ServiceManager manager;
/**
- * Maps publication IDs to their configuration URIs.
- * This is a persistent map to avoid unnecessary publication lookups.
- * Whenever an authorization request for a new publication is dealt with,
- * the publication's configuration URI is stored, to be re-used on later
- * occasions (for the lifetime of the component).
+ * Maps publication IDs to their configuration URIs. This is a persistent
+ * map to avoid unnecessary publication lookups. Whenever an authorization
+ * request for a new publication is dealt with, the publication's
+ * configuration URI is stored, to be re-used on later occasions (for the
+ * lifetime of the component).
*/
private Map pubId2configUri = new HashMap();
-
/**
- * @see org.apache.lenya.cms.ac.usecase.UsecaseAuthorizer#authorizeUsecase(java.lang.String, org.apache.lenya.ac.Role[], org.apache.lenya.cms.publication.Publication)
+ * @see org.apache.lenya.cms.ac.usecase.UsecaseAuthorizer#authorizeUsecase(java.lang.String,
+ * org.apache.lenya.ac.Role[],
+ * org.apache.lenya.cms.publication.Publication)
*/
public boolean authorizeUsecase(String usecase, Role[] roles, Publication publication)
- throws AccessControlException {
+ throws AccessControlException {
return authorizeUsecase(usecase, roles, getConfigurationURI(publication));
}
@@ -126,8 +130,10 @@
}
/**
- * @see org.apache.lenya.cms.ac.usecase.UsecaseAuthorizer#isPermitted(java.lang.String, org.apache.lenya.cms.publication.Publication, org.apache.lenya.ac.Role)
- */
+ * @see org.apache.lenya.cms.ac.usecase.UsecaseAuthorizer#isPermitted(java.lang.String,
+ * org.apache.lenya.cms.publication.Publication,
+ * org.apache.lenya.ac.Role)
+ */
public boolean isPermitted(String usecase, Publication publication, Role role)
throws AccessControlException {
String configUri = getConfigurationURI(publication);
@@ -137,7 +143,9 @@
}
/**
- * @see org.apache.lenya.cms.ac.usecase.UsecaseAuthorizer#setPermission(java.lang.String, org.apache.lenya.cms.publication.Publication, org.apache.lenya.ac.Role, boolean)
+ * @see org.apache.lenya.cms.ac.usecase.UsecaseAuthorizer#setPermission(java.lang.String,
+ * org.apache.lenya.cms.publication.Publication,
+ * org.apache.lenya.ac.Role, boolean)
*/
public void setPermission(String usecase, Publication publication, Role role, boolean granted)
throws AccessControlException {
@@ -166,31 +174,32 @@
}
/**
+ * This method will substitute VISIT_USECASE if no USECASE_PARAMETER is set,
+ * so that it can be used to authorize plain page access as well.
* @see org.apache.lenya.ac.Authorizer#authorize(org.apache.cocoon.environment.Request)
*/
public boolean authorize(Request request) throws AccessControlException {
String usecase = request.getParameter(USECASE_PARAMETER);
- boolean authorized = true;
-
- try {
- if (usecase != null) {
+ if (usecase == null || "".equals(usecase)) {
+ usecase = VISIT_USECASE;
+ }
- String _configurationUri;
- // Check if the service has been parameterized with a configuration URI. This
- // can be used for testing purposes etc.
- if (getConfigurationURI() != null) {
- _configurationUri = getConfigurationURI();
- } else {
- Publication publication = PublicationUtil.getPublication(this.manager, request);
- _configurationUri = getConfigurationURI(publication);
- }
+ boolean authorized = false;
- Role[] roles = PolicyUtil.getRoles(request);
- authorized = authorizeUsecase(usecase, roles, _configurationUri);
+ try {
+ String _configurationUri;
+ // Check if the service has been parameterized with a
+ // configuration URI. This can be used for testing purposes etc.
+ if (getConfigurationURI() != null) {
+ _configurationUri = getConfigurationURI();
} else {
- getLogger().debug("No usecase to authorize. Granting access.");
+ Publication publication = PublicationUtil.getPublication(this.manager, request);
+ _configurationUri = getConfigurationURI(publication);
}
+
+ Role[] roles = PolicyUtil.getRoles(request);
+ authorized = authorizeUsecase(usecase, roles, _configurationUri);
} catch (final PublicationException e) {
throw new AccessControlException(e);
} catch (final AccessControlException e) {
@@ -235,7 +244,6 @@
}
return configURI;
}
-
protected UsecaseRoles getUsecaseRoles(String _configurationUri) throws AccessControlException {
UsecaseRolesBuilder builder = new UsecaseRolesBuilder();
Modified: lenya/trunk/src/pubs/default/config/access-control/usecase-policies.xml
URL: http://svn.apache.org/viewvc/lenya/trunk/src/pubs/default/config/access-control/usecase-policies.xml?view=diff&rev=564551&r1=564550&r2=564551
==============================================================================
--- lenya/trunk/src/pubs/default/config/access-control/usecase-policies.xml (original)
+++ lenya/trunk/src/pubs/default/config/access-control/usecase-policies.xml Fri Aug 10 04:10:57 2007
@@ -21,6 +21,12 @@
<!--+++NOTE+++ The usecase list was initialized using modules/usecase-impl/xslt/initUsecasePolicies.xsl.-->
<usecases xmlns="http://apache.org/cocoon/lenya/ac/1.0">
+ <usecase id="ac.visit">
+ <role id="visit" method="grant"/>
+ <role id="admin" method="grant"/>
+ <role id="edit" method="grant"/>
+ <role id="review" method="grant"/>
+ </usecase>
<usecase id="ac.logout">
<role id="session" method="grant"/>
</usecase>
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.