[jboss-cvs] jboss-seam/src/main/org/jboss/seam/security ...
Shane Bryzak
Shane_Bryzak at symantec.com
Wed Oct 18 01:16:32 EDT 2006
User: sbryzak2
Date: 06/10/18 01:16:32
Modified: src/main/org/jboss/seam/security SeamPermission.java
SeamSecurityManager.java
Log:
Acl implementation
Revision Changes Path
1.3 +12 -8 jboss-seam/src/main/org/jboss/seam/security/SeamPermission.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: SeamPermission.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/SeamPermission.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- SeamPermission.java 18 Oct 2006 02:03:19 -0000 1.2
+++ SeamPermission.java 18 Oct 2006 05:16:32 -0000 1.3
@@ -1,17 +1,18 @@
package org.jboss.seam.security;
-import java.security.Permission;
+import java.security.acl.Permission;
import java.util.Arrays;
-import java.util.Set;
import java.util.HashSet;
+import java.util.Set;
/**
* Represents permissions for a Seam component.
*
* @author Shane Bryzak
*/
-public class SeamPermission extends Permission
+public class SeamPermission implements Permission
{
+ private String name;
private String actions;
private Set<String> actionSet = new HashSet<String>();
@@ -22,7 +23,10 @@
*/
public SeamPermission(String name, String actions)
{
- super(name);
+ if (name == null || "".equals(name.trim()))
+ throw new IllegalArgumentException("Permission name is required");
+
+ this.name = name;
String[] parts = actions.split(",");
Arrays.sort(parts);
@@ -40,9 +44,9 @@
this.actions = sorted.toString();
}
- public boolean implies(Permission permission)
+ public String getName()
{
- return false;
+ return name;
}
public String getActions()
@@ -68,11 +72,11 @@
SeamPermission other = (SeamPermission) obj;
- return other.getName().equals(getName()) && other.actions.equals(this.actions);
+ return other.name.equals(name) && other.actions.equals(this.actions);
}
public int hashCode()
{
- return (getName().hashCode() * 11) ^ (actions.hashCode() * 13);
+ return (name.hashCode() * 11) ^ (actions.hashCode() * 13);
}
}
1.5 +50 -14 jboss-seam/src/main/org/jboss/seam/security/SeamSecurityManager.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: SeamSecurityManager.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/security/SeamSecurityManager.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- SeamSecurityManager.java 18 Oct 2006 02:03:19 -0000 1.4
+++ SeamSecurityManager.java 18 Oct 2006 05:16:32 -0000 1.5
@@ -15,6 +15,7 @@
import org.jboss.seam.InterceptionType;
import org.jboss.seam.Seam;
import org.jboss.seam.annotations.DefinePermissions;
+import org.jboss.seam.annotations.PermissionProvider;
/**
* Holds configuration settings and provides functionality for the security API
@@ -43,7 +44,7 @@
private class PermissionsMetadata {
private String name;
- private Map<String,String> providers;
+ private Map<String,String> providerNames;
public PermissionsMetadata(String name)
{
@@ -57,12 +58,12 @@
public String getProviderName(String action)
{
- return providers.get(action);
+ return providerNames.get(action);
}
- public void addProvider(String action, String providerName)
+ public void addProviderName(String action, String providerName)
{
- providers.put(action, providerName);
+ providerNames.put(action, providerName);
}
}
@@ -109,7 +110,24 @@
}
public void checkPermission(String name, String action)
- throws SecurityException
+ {
+ checkPermission(name, action, null, null);
+ }
+
+ public void checkPermission(Object obj, String action)
+ {
+ PermissionsMetadata meta = getClassPermissionMetadata(obj.getClass());
+
+ String providerName = meta.getProviderName(action);
+ Object provider = null;
+
+ if (providerName != null && !"".equals(providerName))
+ provider = Component.getInstance(providerName, true);
+
+ checkPermission(meta.getName(), action, obj, provider);
+ }
+
+ private void checkPermission(String name, String action, Object obj, Object aclProvider)
{
for (String role : Authentication.instance().getRoles())
{
@@ -119,7 +137,12 @@
for (SeamPermission p : permissions)
{
if (p.getName().equals(name) && p.containsAction(action))
+ {
+ if (aclProvider == null)
return;
+
+
+ }
}
}
}
@@ -129,12 +152,6 @@
name, action));
}
- public void checkPermission(Object obj, String action)
- throws SecurityException
- {
- PermissionsMetadata meta = getClassPermissionMetadata(obj.getClass());
- }
-
private PermissionsMetadata getClassPermissionMetadata(Class cls)
{
if (!classPermissions.containsKey(cls))
@@ -149,8 +166,12 @@
String name = null;
- if (cls.isAnnotationPresent(DefinePermissions.class) &&
- !"".equals(((DefinePermissions) cls.getAnnotation(DefinePermissions.class)).name()))
+ DefinePermissions def = null;
+
+ if (cls.isAnnotationPresent(DefinePermissions.class))
+ def = (DefinePermissions) cls.getAnnotation(DefinePermissions.class);
+
+ if (def != null && !"".equals(def.name()))
{
name = ((DefinePermissions) cls.getAnnotation(DefinePermissions.class)).name();
}
@@ -160,6 +181,21 @@
if (name == null)
name = cls.getName();
+ PermissionsMetadata meta = new PermissionsMetadata(name);
+
+ if (def != null)
+ {
+ for (PermissionProvider p : def.permissions())
+ {
+ for (String action : p.actions().split("[,]"))
+ {
+ meta.addProviderName(action.trim(), p.provider());
+ }
+ }
+ }
+
+ classPermissions.put(cls, meta);
+ return meta;
}
}
}
More information about the jboss-cvs-commits
mailing list