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

Shane Bryzak Shane_Bryzak at symantec.com
Mon Nov 6 20:56:25 EST 2006


  User: sbryzak2
  Date: 06/11/06 20:56:25

  Added:       src/main/org/jboss/seam/security/acl 
                        PersistentAclProvider.java
  Log:
  added persistent acl provider, work in progress
  
  Revision  Changes    Path
  1.1      date: 2006/11/07 01:56:25;  author: sbryzak2;  state: Exp;jboss-seam/src/main/org/jboss/seam/security/acl/PersistentAclProvider.java
  
  Index: PersistentAclProvider.java
  ===================================================================
  package org.jboss.seam.security.acl;
  
  import java.security.Principal;
  import java.security.acl.Permission;
  import java.util.Map;
  import java.util.Set;
  import javax.naming.NamingException;
  import javax.persistence.EntityManager;
  import javax.persistence.EntityManagerFactory;
  
  import static org.jboss.seam.InterceptionType.NEVER;
  import static org.jboss.seam.ScopeType.APPLICATION;
  import org.jboss.seam.annotations.Intercept;
  import org.jboss.seam.annotations.Scope;
  import org.jboss.seam.contexts.Lifecycle;
  import org.jboss.seam.core.ManagedHibernateSession;
  import org.jboss.seam.core.ManagedPersistenceContext;
  import org.jboss.seam.util.Naming;
  import org.jboss.seam.util.Transactions;
  
  /**
   * Persistent Acl provider.
   *
   * @author Shane Bryzak
   */
  @Intercept(NEVER)
  @Scope(APPLICATION)
  public class PersistentAclProvider extends AbstractAclProvider
  {
    private enum PersistenceType {
      managedPersistenceContext,
      managedHibernateSession,
      entityManagerFactory };
  
    private PersistenceType persistenceType;
    private Object pcm;
  
    private String aclUserQuery;
    private String aclQuery;
  
    public Object getPersistenceContextManager()
    {
      return pcm;
    }
  
    public void setPersistenceContextManager(Object value)
    {
      if (ManagedPersistenceContext.class.isAssignableFrom(value.getClass()))
      {
        persistenceType = PersistenceType.managedPersistenceContext;
        this.pcm = value;
      }
      else if (ManagedHibernateSession.class.isAssignableFrom(value.getClass()))
      {
        persistenceType = PersistenceType.managedHibernateSession;
        this.pcm = value;
      }
      else if (value instanceof String)
      {
        Object obj = null;
        try
        {
          obj = Naming.getInitialContext().lookup( (String) value);
          if (EntityManagerFactory.class.isAssignableFrom(obj.getClass()))
          {
            persistenceType = PersistenceType.entityManagerFactory;
            this.pcm = obj;
            return;
          }
        }
        catch (NamingException ex) { }
  
        throw new IllegalArgumentException("Invalid JNDI name specified for EntityManagerFactory");
      }
      else
        throw new IllegalArgumentException(
          "Parameter must be instance of ManagedPersistenceContext, " +
          "ManagedHibernateSession or String value specifying the JNDI name of an EntityManagerFactory");
    }
  
    public String getAclUserQuery()
    {
      return aclUserQuery;
    }
  
    public void setAclUserQuery(String aclUserQuery)
    {
      this.aclUserQuery = aclUserQuery;
    }
  
    public String getAclQuery()
    {
      return aclQuery;
    }
  
    public void setAclQuery(String aclQuery)
    {
      this.aclQuery = aclQuery;
    }
  
    protected Object createAclQuery(Principal principal)
        throws Exception
    {
      switch (persistenceType)
      {
        case managedPersistenceContext:
          return ((ManagedPersistenceContext) pcm).getEntityManager().createQuery(aclUserQuery);
        case managedHibernateSession:
          return ((ManagedHibernateSession) pcm).getSession().createQuery(aclUserQuery);
        case entityManagerFactory:
          EntityManager em = ((EntityManagerFactory) pcm).createEntityManager();
          if ( !Lifecycle.isDestroying() && Transactions.isTransactionActive() )
             em.joinTransaction();
          return em.createQuery(aclUserQuery);
      }
  
      throw new IllegalStateException("Unknown persistence type");
    }
  
    protected void bindQueryParams(Object query, Principal principal)
    {
  
    }
  
    protected Object executeQuery(Object query)
    {
      return null;
    }
  
    protected void closeQuery(Object query)
    {
  
    }
  
    public Set<Permission> getPermissions(Object obj, Principal principal)
    {
      try
      {
        Object q = createAclQuery(principal);
  
        bindQueryParams(q, principal);
  
        executeQuery(q);
  
        closeQuery(q);
      }
      catch (Exception ex) { }
  
      return null;
    }
  
    public Map<Principal,Set<Permission>> getPermissions(Object obj)
    {
      return null;
    }
  }
  
  
  



More information about the jboss-cvs-commits mailing list