Good question, here are my reasons:
When the user get authetificated, his rights are saved in the authentication
context. My webapp is a (kind of) project managing tool.
The authentication pipeline returns all rights of a user for all projects.It
looks like this:
<authentication>
...
<rights>
<projects>
<project name="Project1">
<admin>true</admin>
<developer>true</developer>
</project>
<project name="Project2">
<admin>false</admin>
<developer>true</developer>
</project>
</projects>
</rights>
...
</authentication>
When a user navigates inside a certain project I wan tto retrieve the rights
of this user of this special project
My problem was e.g. how to access the "admin" node value of a certain
project in the sitemap.
You can not nest input-module directives in the sitemap, that's what I would
have needed.
Something like:
...
<map:transform type="xslt" src="stylesheets/test.xsl">
<map:parameter name="adminprojects"
value="{session-context:authentication/authentication/rights/projects/project[text()="{session-attr:project}"]/admin"/>
</map:transform>
However, you can't use the seeion-atrribute input module inside the session
context input module, unfortunately.
There would be work-arounds of course, like using an xsp or the session
transformer to retrieve the necessary information but I wanted a "shorter"
way. I wanted to avoid to write a new pipeline for it and then merge the
result of this pipeline with pipeline that the rights-information.
The javagurus in the group, did not answer yet, maybe I have to adress to
them directly ;-),
If you could follow all this and you have a solution, please tell,
Regards,
Stephanie
> Stephanie
>
> Sorry to not answer this question direct, and I am sure the
> Java gurus will help, but... why do you need this Action at
> all, when you can use the SessionPropagatorAction to
> store user info into the sitemap for access by any pipeline, or
> use the session-context to retrieve user info for protected
> pipelines ?
>
> Derek
>
> >>> [EMAIL PROTECTED] 2004/07/19 10:28:16 AM >>>
> Hi all,
>
> I get a NullPointerException in my GetRolesAction, hope somebody of you
> guys
> can help me.
>
> With my action I want to make the user roles available to the sitemap.
> The
> roles are stored in the Authentication Context.
>
> All I want to do is read out the roles from the Authentication context
> and
> put it in the map that is returned to the sitemap.
>
> However I get a NullPointerException when retrieving the
> authentication
> context.
> I "followed" the exception to the Class AuthenticationContextProvider.
> I
> guess the problem is that the ServiceManager is not initialized, but
> is
> null.
>
> How can I make my Code working? Do I have to call the service() method
> of
> the AuthenticationContextProvider to set the serviceManager instance??
>
> Thanks alot for bringing light into my darkness,
>
> Regards,
>
> Stephanie
>
> P.S.: Code and Exception Text see below:
>
> ________________________________________________________________________
>
> public class GetRolesAction extends AbstractAction implements
> ThreadSafe,
> Initializable{
>
> protected AuthenticationContextProvider contextProvider;
>
> public void initialize() throws Exception {
> contextProvider = new AuthenticationContextProvider();
> }
>
>
> public Map act(
> Redirector redirector,
> SourceResolver sourceResolver,
> Map objectModel,
> String src,
> Parameters parameters)
> throws Exception {
>
> Map map = null;
>
> //check parameter
> final String project =
> parameters.getParameter("project");
> if(project == null){
> throw new ProcessingException("GetRolesAction
> requires the parameter
> 'project'.");
> }
> if (contextProvider == null){
> throw new NullPointerException("Can't get
> contextProvider.");
> }
> AuthenticationContext sessionContext
> =
> null;
>
>
if(contextProvider.existsSessionContext(AuthenticationConstants.SESSION_CONTEXT_NAME)){
>
> sessionContext =
> (AuthenticationContext)
>
contextProvider.getSessionContext(AuthenticationConstants.SESSION_CONTEXT_NAME);
> }
> else{
> throw new
> NullPointerException("Can't get sessionContext");
> }
>
> map = new HashMap(3);
> //check
> roles
> if
>
(sessionContext.getSingleNode("authentication/rights/projects/[EMAIL
PROTECTED]"+project+"]/admin")!=null)
> map.put("admin","true");
> else
> map.put("admin","false");
>
> if
>
(sessionContext.getSingleNode("authentication/rights/projects/[EMAIL
PROTECTED]"+project+"]/developer")!=null)
> map.put("developer","true");
> else
> map.put("developer","false");
>
> if
>
(sessionContext.getSingleNode("authentication/rights/projects/[EMAIL
PROTECTED]"+project+"]/guest")!=null)
> map.put("guest","true");
> else
> map.put("guest","false");
>
> return
> map;
> }
>
> }
> ------------------------------------------------------------------------
>
>
> java.lang.NullPointerException
>
> at
>
org.apache.cocoon.webapps.authentication.context.AuthenticationContextProvider.getSessionContext(AuthenticationContextProvider.java:97)
>
> at
> archivesystem.roles.GetRolesAction.act(GetRolesAction.java:57)
>
> at
>
org.apache.cocoon.components.treeprocessor.sitemap.ActTypeNode.invoke(ActTypeNode.java:152)
>
> at
>
org.apache.cocoon.components.treeprocessor.AbstractParentProcessingNode.invokeNodes(AbstractParentProcessingNode.java:84)
>
> ....
> --------------------------------------------------------------------------
>
> My Sitemap snippet
>
> <map:match pattern="protected-*">
> <map:act type="auth-protect">
> <map:match pattern="protected-delivery">
> <map:generate type="request"/>
> <map:act type="getRoles">
> <map:parameter name="project"
> value="{session-attr:project}"/>
> <map:select type="parameter">
> <map:parameter name="parameter-selector-test"
> value="{admin}"/>
> <map:when test="true">
> <map:transform type="xslt"
> src="stylesheets/deliveries.xsl"/>
> </map:when>
> <map:otherwise>
> <map:transform type="xslt"
> src="stylesheets/deliveries-readonly.xsl"/>
> </map:otherwise>
> </map:select>
> <map:serialize type="html"/>
> </map:act>
> </map:match>
> </map:act>
> </map:match>
>
>
> --------------------------------------------------------------------------
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> --
> This message has been scanned for viruses and
> dangerous content by MailScanner, and is
> believed to be clean.
> MailScanner thanks transtec Computers for their support.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]