Thursday, February 17, 2011

How to create custom permission using Spring ACL 3.0.5

How to create custom permission using Spring ACL


Create a MyOwnPermission class which extends BasePermission
Add new Permission like

public static final Permission ROLE_ACCEPT = new MyOwnPermission(1 << 5, 'C'); // 32

The mask & char code should not be same as the one from BasePermission, here I am using 32 as mask Spring 3.05 no more lets you to register your MyOwnPermission like below. 

public final class MyOwnPermission extends BasePermission { 
   static { 
       BasePermission.registerPermissionsFor(MyOwnPermission.class) 
   } 


As per Luke Taylor (Senior Member, Acegi Security System TeamSpring Team) 
"You can inject a PermissionFactory into the BasicLookupStrategy and it will be used to generate the Permission objects. The DefaultPermissionFactory can be used to register additional permissions."

I did the below. I inject my MyOwnPermission class to one of MyOwn LookupStrategy implementation class. 

public class MyOwnLookupStrategy implements LookupStrategy  { 
     private PermissionFactory pf = new MyOwnPermissionFactory(); 
...
}

and the MyOwnPermissionFactory will be like 

public class MyOwnPermissionFactory extends DefaultPermissionFactory {
   public MyOwnPermissionFactory() { 

      super(); 
      registerPublicPermissions(MyOwnPermission.class); 
   } 
}  

Refer Jira:SEC-813  & Jira:SEC-1022

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/domain-acls.html

For more info see thread  Springsource Forum:93416