[jboss-cvs] jboss-seam/src/main/org/jboss/seam/security ...

Shane Bryzak Shane_Bryzak at symantec.com
Wed Oct 18 01:16:32 EDT 2006


  User: sbryzak2
  Date: 06/10/18 01:16:32

  Modified:    src/main/org/jboss/seam/security   SeamPermission.java
                        SeamSecurityManager.java
  Log:
  Acl implementation
  
  Revision  Changes    Path
  1.3       +12 -8     jboss-seam/src/main/org/jboss/seam/security/SeamPermission.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: SeamPermission.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/SeamPermission.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- SeamPermission.java	18 Oct 2006 02:03:19 -0000	1.2
  +++ SeamPermission.java	18 Oct 2006 05:16:32 -0000	1.3
  @@ -1,17 +1,18 @@
   package org.jboss.seam.security;
   
  -import java.security.Permission;
  +import java.security.acl.Permission;
   import java.util.Arrays;
  -import java.util.Set;
   import java.util.HashSet;
  +import java.util.Set;
   
   /**
    * Represents permissions for a Seam component.
    *
    * @author Shane Bryzak
    */
  -public class SeamPermission extends Permission
  +public class SeamPermission implements Permission
   {
  +  private String name;
     private String actions;
   
     private Set<String> actionSet = new HashSet<String>();
  @@ -22,7 +23,10 @@
      */
     public SeamPermission(String name, String actions)
     {
  -    super(name);
  +    if (name == null || "".equals(name.trim()))
  +      throw new IllegalArgumentException("Permission name is required");
  +
  +    this.name = name;
   
       String[] parts = actions.split(",");
       Arrays.sort(parts);
  @@ -40,9 +44,9 @@
       this.actions = sorted.toString();
     }
   
  -  public boolean implies(Permission permission)
  +  public String getName()
     {
  -    return false;
  +    return name;
     }
   
     public String getActions()
  @@ -68,11 +72,11 @@
   
       SeamPermission other = (SeamPermission) obj;
   
  -    return other.getName().equals(getName()) && other.actions.equals(this.actions);
  +    return other.name.equals(name) && other.actions.equals(this.actions);
     }
   
     public int hashCode()
     {
  -    return (getName().hashCode() * 11) ^ (actions.hashCode() * 13);
  +    return (name.hashCode() * 11) ^ (actions.hashCode() * 13);
     }
   }
  
  
  
  1.5       +50 -14    jboss-seam/src/main/org/jboss/seam/security/SeamSecurityManager.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: SeamSecurityManager.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/SeamSecurityManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -b -r1.4 -r1.5
  --- SeamSecurityManager.java	18 Oct 2006 02:03:19 -0000	1.4
  +++ SeamSecurityManager.java	18 Oct 2006 05:16:32 -0000	1.5
  @@ -15,6 +15,7 @@
   import org.jboss.seam.InterceptionType;
   import org.jboss.seam.Seam;
   import org.jboss.seam.annotations.DefinePermissions;
  +import org.jboss.seam.annotations.PermissionProvider;
   
   /**
    * Holds configuration settings and provides functionality for the security API
  @@ -43,7 +44,7 @@
   
     private class PermissionsMetadata {
       private String name;
  -    private Map<String,String> providers;
  +    private Map<String,String> providerNames;
   
       public PermissionsMetadata(String name)
       {
  @@ -57,12 +58,12 @@
   
       public String getProviderName(String action)
       {
  -      return providers.get(action);
  +      return providerNames.get(action);
       }
   
  -    public void addProvider(String action, String providerName)
  +    public void addProviderName(String action, String providerName)
       {
  -      providers.put(action, providerName);
  +      providerNames.put(action, providerName);
       }
     }
   
  @@ -109,7 +110,24 @@
     }
   
     public void checkPermission(String name, String action)
  -      throws SecurityException
  +  {
  +    checkPermission(name, action, null, null);
  +  }
  +
  +  public void checkPermission(Object obj, String action)
  +  {
  +    PermissionsMetadata meta = getClassPermissionMetadata(obj.getClass());
  +
  +    String providerName = meta.getProviderName(action);
  +    Object provider = null;
  +
  +    if (providerName != null && !"".equals(providerName))
  +      provider = Component.getInstance(providerName, true);
  +
  +    checkPermission(meta.getName(), action, obj, provider);
  +  }
  +
  +  private void checkPermission(String name, String action, Object obj, Object aclProvider)
     {
       for (String role : Authentication.instance().getRoles())
       {
  @@ -119,7 +137,12 @@
           for (SeamPermission p : permissions)
           {
             if (p.getName().equals(name) && p.containsAction(action))
  +          {
  +            if (aclProvider == null)
               return;
  +
  +
  +          }
           }
         }
       }
  @@ -129,12 +152,6 @@
         name, action));
     }
   
  -  public void checkPermission(Object obj, String action)
  -      throws SecurityException
  -  {
  -    PermissionsMetadata meta = getClassPermissionMetadata(obj.getClass());
  -  }
  -
     private PermissionsMetadata getClassPermissionMetadata(Class cls)
     {
       if (!classPermissions.containsKey(cls))
  @@ -149,8 +166,12 @@
   
             String name = null;
   
  -          if (cls.isAnnotationPresent(DefinePermissions.class) &&
  -              !"".equals(((DefinePermissions) cls.getAnnotation(DefinePermissions.class)).name()))
  +          DefinePermissions def = null;
  +
  +          if (cls.isAnnotationPresent(DefinePermissions.class))
  +            def = (DefinePermissions) cls.getAnnotation(DefinePermissions.class);
  +
  +          if (def != null && !"".equals(def.name()))
             {
               name = ((DefinePermissions) cls.getAnnotation(DefinePermissions.class)).name();
             }
  @@ -160,6 +181,21 @@
             if (name == null)
               name = cls.getName();
   
  +          PermissionsMetadata meta = new PermissionsMetadata(name);
  +
  +          if (def != null)
  +          {
  +            for (PermissionProvider p : def.permissions())
  +            {
  +              for (String action : p.actions().split("[,]"))
  +              {
  +                meta.addProviderName(action.trim(), p.provider());
  +              }
  +            }
  +          }
  +
  +          classPermissions.put(cls, meta);
  +          return meta;
           }
         }
       }
  
  
  



More information about the jboss-cvs-commits mailing list