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

Shane Bryzak Shane_Bryzak at symantec.com
Tue Nov 14 00:24:05 EST 2006


  User: sbryzak2
  Date: 06/11/14 00:24:05

  Modified:    src/main/org/jboss/seam/security/acl 
                        PersistentAclProvider.java
  Log:
  refactored PermissionsMetadata out of SeamSecurityManager
  
  Revision  Changes    Path
  1.8       +52 -13    jboss-seam/src/main/org/jboss/seam/security/acl/PersistentAclProvider.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: PersistentAclProvider.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/acl/PersistentAclProvider.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -b -r1.7 -r1.8
  --- PersistentAclProvider.java	13 Nov 2006 00:05:58 -0000	1.7
  +++ PersistentAclProvider.java	14 Nov 2006 05:24:05 -0000	1.8
  @@ -3,6 +3,7 @@
   import java.security.Principal;
   import java.security.acl.Permission;
   import java.util.ArrayList;
  +import java.util.HashSet;
   import java.util.List;
   import java.util.Map;
   import java.util.Set;
  @@ -15,10 +16,12 @@
   import static org.jboss.seam.ScopeType.APPLICATION;
   import org.jboss.seam.annotations.Intercept;
   import org.jboss.seam.annotations.Scope;
  +import org.jboss.seam.annotations.security.DefinePermissions;
   import org.jboss.seam.contexts.Lifecycle;
   import org.jboss.seam.core.ManagedHibernateSession;
   import org.jboss.seam.core.ManagedPersistenceContext;
   import org.jboss.seam.security.Authentication;
  +import org.jboss.seam.security.SeamPermission;
   import org.jboss.seam.security.SeamSecurityManager;
   import org.jboss.seam.util.Naming;
   import org.jboss.seam.util.Transactions;
  @@ -110,8 +113,8 @@
           return ((ManagedHibernateSession) pcm).getSession().createQuery(aclQuery);
         case entityManagerFactory:
           EntityManager em = ((EntityManagerFactory) pcm).createEntityManager();
  -        if ( !Lifecycle.isDestroying() && Transactions.isTransactionActive() )
  -           em.joinTransaction();
  +//        if ( !Lifecycle.isDestroying() && Transactions.isTransactionActive() )
  +//           em.joinTransaction();
           return em.createQuery(aclQuery);
       }
   
  @@ -158,13 +161,48 @@
       return null;
     }
   
  -  protected Set<Permission> convertToPermissions(Object target, Object perms)
  +  /**
  +   * Converts the result of a
  +   * 
  +   * @param target
  +   * @param perms
  +   * @return
  +   */
  +  protected Set<Permission> convertToPermissions(Principal principal, Object target, Object perms)
     {
  +    if (perms == null)
  +      return null;
   
  +    //SeamSecurityManager.instance().get
   
  -    /** @todo use the @AclProvider specified on the target object to convert
  -     * the specified permissions param to a set of actual permissions */
  -    return null;
  +  	if (List.class.isAssignableFrom(perms.getClass()))
  +  	{
  +      Set<Permission> permissions = new HashSet<Permission>();
  +      
  +      for (Object o : (List) perms)
  +      {
  +        if (o instanceof Object[])
  +        {
  +          Object[] values = (Object[]) o;
  +          int mask = (Integer) values[0];
  +          String recipient = (String) values[1];
  +          RecipientType recipientType = (RecipientType) values[2];
  +          
  +          DefinePermissions def = (DefinePermissions) target.getClass().getAnnotation(DefinePermissions.class);
  +          for (org.jboss.seam.annotations.security.AclProvider provider : def.permissions())
  +          {
  +            if ((provider.mask() & mask) > 0)
  +              /** todo - use the correct name to create the permission */
  +              permissions.add(new SeamPermission("permissionName", provider.action()));
  +          }                   
  +        }
  +      }
  +      
  +      return permissions;
  +  	}
  +    else
  +      throw new IllegalArgumentException(String.format(
  +          "Permissions [%s] must be an instance of java.util.List", perms));
     }
   
     @Override
  @@ -178,11 +216,12 @@
   
         Object result = executeQuery(q);
   
  -      return convertToPermissions(obj, result);
  +      return convertToPermissions(principal, obj, result);
  +    }
  +    catch (Exception ex) 
  +    { 
  +      throw new SecurityException(String.format("Error determining permissions: %s", ex.getMessage()), ex);
       }
  -    catch (Exception ex) { }
  -
  -    return null;
     }
   
     @Override
  
  
  



More information about the jboss-cvs-commits mailing list