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

Shane Bryzak Shane_Bryzak at symantec.com
Mon Nov 6 23:33:47 EST 2006


  User: sbryzak2
  Date: 06/11/06 23:33:47

  Modified:    src/main/org/jboss/seam/security/acl 
                        PersistentAclProvider.java
  Log:
  initial support for various persistence configurations
  
  Revision  Changes    Path
  1.2       +69 -9     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.1
  retrieving revision 1.2
  diff -u -b -r1.1 -r1.2
  --- PersistentAclProvider.java	7 Nov 2006 01:56:25 -0000	1.1
  +++ PersistentAclProvider.java	7 Nov 2006 04:33:47 -0000	1.2
  @@ -2,11 +2,15 @@
   
   import java.security.Principal;
   import java.security.acl.Permission;
  +import java.util.ArrayList;
  +import java.util.List;
   import java.util.Map;
   import java.util.Set;
   import javax.naming.NamingException;
   import javax.persistence.EntityManager;
   import javax.persistence.EntityManagerFactory;
  +import javax.persistence.Query;
  +import javax.transaction.SystemException;
   
   import static org.jboss.seam.InterceptionType.NEVER;
   import static org.jboss.seam.ScopeType.APPLICATION;
  @@ -15,6 +19,8 @@
   import org.jboss.seam.contexts.Lifecycle;
   import org.jboss.seam.core.ManagedHibernateSession;
   import org.jboss.seam.core.ManagedPersistenceContext;
  +import org.jboss.seam.persistence.PersistenceProvider;
  +import org.jboss.seam.security.Authentication;
   import org.jboss.seam.util.Naming;
   import org.jboss.seam.util.Transactions;
   
  @@ -27,14 +33,14 @@
   @Scope(APPLICATION)
   public class PersistentAclProvider extends AbstractAclProvider
   {
  -  private enum PersistenceType {
  +  protected enum PersistenceType {
       managedPersistenceContext,
       managedHibernateSession,
       entityManagerFactory };
   
  -  private PersistenceType persistenceType;
  -  private Object pcm;
  +  protected PersistenceType persistenceType;
   
  +  private Object pcm;
     private String aclUserQuery;
     private String aclQuery;
   
  @@ -117,19 +123,72 @@
       throw new IllegalStateException("Unknown persistence type");
     }
   
  -  protected void bindQueryParams(Object query, Principal principal)
  +  protected void bindQueryParams(Object query, Object target, Principal principal)
     {
  +    List<String> roles = new ArrayList<String>();
   
  +    if (Authentication.class.isAssignableFrom(principal.getClass()))
  +    {
  +      for (String role : ((Authentication) principal).getRoles())
  +      {
  +        roles.add(role);
  +      }
     }
   
  -  protected Object executeQuery(Object query)
  +    switch (persistenceType)
  +    {
  +      case managedPersistenceContext:
  +        ((Query) query).setParameter("recipient", principal.getName())
  +          .setParameter("roles", roles)
  +          .setParameter("identity", getObjectIdentity(target));
  +        break;
  +      case managedHibernateSession:
  +        /** @todo implement */
  +        break;
  +      case entityManagerFactory:
  +        /** @todo implement */
  +        break;
  +    }
  +  }
  +
  +  protected Object getObjectIdentity(Object obj)
     {
  +    switch (persistenceType)
  +    {
  +      case managedPersistenceContext:
  +        try
  +        {
  +          return PersistenceProvider.instance().getId(obj,
  +              ( (ManagedPersistenceContext) pcm).getEntityManager());
  +        }
  +        catch (SystemException ex) {  /** @todo  */
  +        }
  +        catch (NamingException ex) { /** @todo  */
  +        }
  +
  +      /** @todo Implement hibernate and emf support */
  +    }
  +
       return null;
     }
   
  -  protected void closeQuery(Object query)
  +  protected Object executeQuery(Object query)
     {
  +    switch (persistenceType)
  +    {
  +      case managedPersistenceContext:
  +        return ((Query) query).getResultList();
  +      /** @todo Implement hibernate and emf support */
  +    }
  +
  +    return null;
  +  }
   
  +  protected Set<Permission> convertToPermissions(Object target, Object perms)
  +  {
  +    /** @todo use the @AclProvider specified on the target object to convert
  +     * the specified permissions param to a set of actual permissions */
  +    return null;
     }
   
     public Set<Permission> getPermissions(Object obj, Principal principal)
  @@ -138,11 +197,11 @@
       {
         Object q = createAclQuery(principal);
   
  -      bindQueryParams(q, principal);
  +      bindQueryParams(q, obj, principal);
   
  -      executeQuery(q);
  +      Object result = executeQuery(q);
   
  -      closeQuery(q);
  +      return convertToPermissions(obj, result);
       }
       catch (Exception ex) { }
   
  @@ -151,6 +210,7 @@
   
     public Map<Principal,Set<Permission>> getPermissions(Object obj)
     {
  +    /** @todo implement this */
       return null;
     }
   }
  
  
  



More information about the jboss-cvs-commits mailing list