[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