On Sep 1, 2009, at 7:54 AM, Ate Douma wrote:

David Sean Taylor wrote:
Would anyone object to me moving the Permission classes (FolderPermission, PortletPermission, BaseJetspeedPermission etc...) back into /jetspeed-commons ? I cannot find a way to easily extend the permission system, something I could easily do in 2.1.3. For example, from a portlet I would like to do a permission check from a portlet:
       try
       {
// use standard Java security to do a permission check using the seed configuration AccessController.checkPermission(new ContactPermission(contact.getID(), "view"));
       }
       catch (Throwable t)
       {
           isContactViewable = false;
       }
But I have to derive my ContactPermission from BaseJetspeedPermission, living in the security jar I am stuck right now with a 2.1.3 portal using AccountPermissions that won't port to 2.2, as well as the Contact example above in another new portal.

Hi David,

The Permission classes, just as our Security Principal classes, were drastically refactored to get rid of the many "wrapped" layers in the 2.1.x security model. Permissions are a peculiar beast as they need to extend both the java.security.Permission abstract class as well as be mapped on(or preferably extend) persistent capable classes to be able to store them in the database. Without falling back into the old 2.1.x "trap" of creating another wrapping or marshaling/unmarshaling solution this was difficult to implement other than switching to a single public interface (JetspeedPermission) and having to define specific/extended Permission classes within the security component (spi) package. Creating a new Permission instance now is delegated to, and thereby controlled by, the new PermissionManager factory methods like .newPermission(String type. String name, String actions). Creating/instantiating new Permission types like ContactPermission in the new solution indeed will require adding a new ContactPermissionImpl extending BaseJetspeedPermission in the portal context (e.g. same classpath as the security-component itself). You can of course optionally have it implement an interface like a ContactPermission if needed. When setup like this, the following could then be an example rewrite of your example above:

AccessController .checkPermission(permissionManager.newPermission("contact", contact.getID().toString, "view"));

I know all this requires a little bit more work then before but AFAIK not *much* more.

This is perfect. My bad, I overlooked the newPermission interface in the base factory class. (be nice if the interfaces had javadocs, im as guilty of this interface as anyone...)


Only major difference is the need to provide these Permission classes within the portal classpath, not the shared classpath. I suppose(d) the usage of these would be in the portal (security) context anyway, but maybe I'm wrong there.

If you see major problems for converting your 2.1.3 configuration over to the new model I'd like to help out and see if I can come up with a solution. If it really turns out to be problematic, of course we'll have to find a different solution. And, if necessary, even move these base classes back into jetspeed-commons. But then we'll have to go back again to a wrapping and marshalling/ unmarshalling solution for persistence as well.

Additionally, I can only add permission/actions in my seed data that are validated by JetspeedAction's valid window states or portlet modes.
I will have to look deeper into this. Could be we still have some loose ends there.

Furthermore, for modes like "config" the actions *still* seem to be failing when loaded from permission-seed-data.
OK, can you provide me more details?
I'd like to help out and see if we can solve this.

Simply working from the trunk, edit j2-seed.xml and and then do a target=demo build and you will see the error. For example:

<Permission type="portal" resource="rss::*" actions="view, edit, someAction">

or even an extended mode:

<Permission type="portal" resource="rss::*" actions="view, edit, config">

The build will error out complaining about an undefined action. I've created a JIRA issue, doesn't matter who works on it, I can get to it too


I would like to propose:
1. moving BaseJetspeedPermission and its derived classes to commons
Please see above.
I'm not against it, but I'd like to review first if the current solution cannot be used after all, possibly with some improvements.

No. Your solution works for me. People who are providing their own permission classes will have to either drop them in the common class loader or in Jetspeed's class loader


2. being more lenient on actions (allow any valid string allowed by Java Permissions)
+1, but we'll have to investigate how to do this.
AFAIK in Jetspeed 2.1.3 was as restrictive in this respect or I overlooked something big-time when I devised and implemented the new solution.


It probably didn't work as expected in 2.1.3 either, not trying to say the new implementation broke something here, just saying "it ain't working so lets fix it" :)
JIRA issue:

https://issues.apache.org/jira/browse/JS2-1059







---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to