cocoon-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Derek Hohls" <DHo...@csir.co.za>
Subject Re: HELP! Custom Action using AuthenticationContext
Date Mon, 19 Jul 2004 11:18:57 GMT
Stephanie

OK, I understand - just that my approach would be
different - I *would* use XSL, in a mini-pipeline, to
retrieve this info, and merge it in - since this seems to
be essentially an XML manipulation problem which is 
what XSL was designed for... overall my preference is
to avoid writing new (java) code as much as possible!

I think these differening appraches simply show how
flexible Cocoon really is!

Hope you get an answer soon.

Derek

>>> stephanie.zohner@gmx.at 2004/07/19 01:05:39 PM >>>
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
> 
> >>> stephanie.zohner@gmx.at 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/project[@name="+project+"]/admin")!=null)
> 			map.put("admin","true");
> 		else
> 			map.put("admin","false");
> 		
> 		if
>
(sessionContext.getSingleNode("authentication/rights/projects/project[@name="+project+"]/developer")!=null)
> 			map.put("developer","true");
> 		else
> 			map.put("developer","false");
> 			
> 		if
>
(sessionContext.getSingleNode("authentication/rights/projects/project[@name="+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: users-unsubscribe@cocoon.apache.org 
> For additional commands, e-mail: users-help@cocoon.apache.org 
> 
> 
> -- 
> 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: users-unsubscribe@cocoon.apache.org 
> For additional commands, e-mail: users-help@cocoon.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org 
For additional commands, e-mail: users-help@cocoon.apache.org 


-- 
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: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org


Mime
View raw message