[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