Author: tv
Date: Mon Sep 10 08:55:44 2012
New Revision: 1382699
URL: http://svn.apache.org/viewvc?rev=1382699&view=rev
Log:
Add test for TurbineAccessControlList and make it work
Added:
turbine/fulcrum/trunk/security/api/src/test/TurbineACLRoleConfig.xml
(with props)
Modified:
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineACLFactory.java
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/ACLFactoryTest.java
Modified:
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineACLFactory.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineACLFactory.java?rev=1382699&r1=1382698&r2=1382699&view=diff
==============================================================================
---
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineACLFactory.java
(original)
+++
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineACLFactory.java
Mon Sep 10 08:55:44 2012
@@ -18,18 +18,16 @@ package org.apache.fulcrum.security.mode
* specific language governing permissions and limitations
* under the License.
*/
-import java.util.HashMap;
-import java.util.Map;
+import java.util.Set;
import org.apache.fulcrum.security.GroupManager;
import org.apache.fulcrum.security.acl.AccessControlList;
-import org.apache.fulcrum.security.entity.Group;
-import org.apache.fulcrum.security.entity.Role;
import org.apache.fulcrum.security.entity.User;
import org.apache.fulcrum.security.model.ACLFactory;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
import org.apache.fulcrum.security.spi.AbstractManager;
-import org.apache.fulcrum.security.util.PermissionSet;
-import org.apache.fulcrum.security.util.RoleSet;
+import org.apache.fulcrum.security.util.DataBackendException;
import org.apache.fulcrum.security.util.UnknownEntityException;
/**
@@ -46,13 +44,13 @@ public class TurbineACLFactory extends A
*/
public <T extends AccessControlList> T getAccessControlList(User user)
{
- Map<Group, RoleSet> roleSets = new HashMap<Group, RoleSet>();
- Map<Role, PermissionSet> permissionSets = new HashMap<Role,
PermissionSet>();
+ TurbineUser tu = (TurbineUser)user;
+ Set<TurbineUserGroupRole> tugr = tu.getUserGroupRoleSet();
try
{
@SuppressWarnings("unchecked")
- T aclInstance = (T) getAclInstance(roleSets,
permissionSets);
+ T aclInstance = (T) getAclInstance(tugr);
return aclInstance;
}
catch (UnknownEntityException uue)
@@ -67,23 +65,30 @@ public class TurbineACLFactory extends A
* This constructs a new ACL object from the configured class and
* initializes it with the supplied roles and permissions.
*
- * @param roles
- * The roles that this ACL should contain
- * @param permissions
- * The permissions for this ACL
+ * @param turbineUserGroupRoleSet
+ * The set of user/group/role relations that this acl is built
from
*
* @return an object implementing ACL interface.
* @throws UnknownEntityException
* if the object could not be instantiated.
*/
- private TurbineAccessControlList getAclInstance(Map<? extends Group, ?
extends RoleSet> roles,
- Map<? extends Role, ? extends PermissionSet> permissions) throws
UnknownEntityException
+ private TurbineAccessControlList getAclInstance(Set<? extends
TurbineUserGroupRole> turbineUserGroupRoleSet) throws UnknownEntityException
{
+ GroupManager groupManager = null;
+
+ try
+ {
+ groupManager = getGroupManager();
+ }
+ catch (DataBackendException e)
+ {
+ // ignore
+ }
+
TurbineAccessControlList accessControlList;
try
{
- GroupManager groupManager = (GroupManager)
resolve(GroupManager.ROLE);
- accessControlList = new TurbineAccessControlListImpl(roles,
permissions, groupManager);
+ accessControlList = new
TurbineAccessControlListImpl(turbineUserGroupRoleSet, groupManager);
}
catch (Exception e)
{
Modified:
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java?rev=1382699&r1=1382698&r2=1382699&view=diff
==============================================================================
---
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
(original)
+++
turbine/fulcrum/trunk/security/api/src/java/org/apache/fulcrum/security/model/turbine/TurbineAccessControlListImpl.java
Mon Sep 10 08:55:44 2012
@@ -21,12 +21,16 @@ package org.apache.fulcrum.security.mode
*/
+import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
import org.apache.fulcrum.security.GroupManager;
import org.apache.fulcrum.security.entity.Group;
import org.apache.fulcrum.security.entity.Permission;
import org.apache.fulcrum.security.entity.Role;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
import org.apache.fulcrum.security.util.FulcrumSecurityException;
import org.apache.fulcrum.security.util.GroupSet;
import org.apache.fulcrum.security.util.PermissionSet;
@@ -52,9 +56,9 @@ public class TurbineAccessControlListImp
private static final long serialVersionUID = 2678947159949477950L;
/** The sets of roles that the user has in different groups */
- private Map<? extends Group, ? extends RoleSet> roleSets;
+ private Map<Group, RoleSet> roleSets;
/** The sets of permissions that the user has in different groups */
- private Map<? extends Role, ? extends PermissionSet> permissionSets;
+ private Map<Group, PermissionSet> permissionSets;
/** The global group */
private Group globalGroup;
/** The group manager */
@@ -75,36 +79,58 @@ public class TurbineAccessControlListImp
* changes made to the security settings in that time are not reflected
* in the state of this object. If you need to reset an user's permissions
* you need to invalidate his session. <br>
- * The objects that constructs an AccessControlList must supply hashtables
- * of role/permission sets keyed with group objects. <br>
*
- * @param roleSets a hashtable containing RoleSet objects keyed with Group
objects
- * @param permissionSets a hashtable containing PermissionSet objects
keyed with Group objects
+ * @param turbineUserGroupRoleSet
+ * The set of user/group/role relations that this acl is built
from
* @param groupManager the Group manager
+ *
* @throws FulcrumSecurityException if the global group cannot be retrieved
*/
public TurbineAccessControlListImpl(
- Map<? extends Group, ? extends RoleSet> roleSets,
- Map<? extends Role, ? extends PermissionSet> permissionSets,
+ Set<? extends TurbineUserGroupRole> turbineUserGroupRoleSet,
GroupManager groupManager) throws FulcrumSecurityException
{
- this.roleSets = roleSets;
- this.permissionSets = permissionSets;
+ this.roleSets = new HashMap<Group, RoleSet>();
+ this.permissionSets = new HashMap<Group, PermissionSet>();
this.groupManager = groupManager;
- this.globalGroup =
groupManager.getGroupByName(TurbineModelManager.GLOBAL_GROUP_NAME);
- for (Map.Entry<? extends Group, ? extends RoleSet> entry :
roleSets.entrySet())
+
+ for (TurbineUserGroupRole ugr : turbineUserGroupRoleSet)
{
- Group group = entry.getKey();
+ Group group = ugr.getGroup();
groupSet.add(group);
- RoleSet rs = entry.getValue();
- roleSet.add(rs);
- }
- for (Map.Entry<? extends Role, ? extends PermissionSet> entry :
permissionSets.entrySet())
- {
- Role role = entry.getKey();
+
+ TurbineRole role = (TurbineRole)ugr.getRole();
roleSet.add(role);
- PermissionSet ps = entry.getValue();
+ if (roleSets.containsKey(group))
+ {
+ roleSets.get(group).add(role);
+ }
+ else
+ {
+ RoleSet rs = new RoleSet();
+ rs.add(role);
+ roleSets.put(group, rs);
+ }
+
+ PermissionSet ps = role.getPermissions();
permissionSet.add(ps);
+ if (permissionSets.containsKey(group))
+ {
+ permissionSets.get(group).add(ps);
+ }
+ else
+ {
+ permissionSets.put(group, ps);
+ }
+ }
+
+ if (groupManager != null)
+ {
+ this.globalGroup =
groupManager.getGroupByName(TurbineModelManager.GLOBAL_GROUP_NAME);
+ }
+ else
+ {
+ this.globalGroup =
groupSet.getByName(TurbineModelManager.GLOBAL_GROUP_NAME);
}
}
@@ -206,34 +232,24 @@ public class TurbineAccessControlListImp
/**
* Checks if the user is assigned a specific Role in the Group.
*
- * @param role the Role
- * @param group the Group
+ * @param roleName the Role name
+ * @param groupName the Group name
* @return <code>true</code> if the user is assigned the Role in the Group.
*/
- public boolean hasRole(String role, String group)
+ public boolean hasRole(String roleName, String groupName)
{
- boolean roleFound = false;
try
{
- for (Map.Entry<? extends Group, ? extends RoleSet> entry :
roleSets.entrySet())
- {
- Group g = entry.getKey();
- if (g.getName().equalsIgnoreCase(group))
- {
- RoleSet rs = entry.getValue();
- roleFound = rs.containsName(role);
- }
- }
+ return hasRole(roleSet.getByName(roleName),
groupSet.getByName(groupName));
}
catch (Exception e)
{
- roleFound = false;
+ return false;
}
- return roleFound;
}
/**
- * Checks if the user is assigned a specifie Role in any of the given
+ * Checks if the user is assigned a specific Role in any of the given
* Groups
*
* @param rolename the name of the Role
@@ -243,28 +259,14 @@ public class TurbineAccessControlListImp
*/
public boolean hasRole(String rolename, GroupSet groupset)
{
- Role role;
try
{
- role = roleSet.getByName(rolename);
+ return hasRole(roleSet.getByName(rolename), groupset);
}
catch (Exception e)
{
return false;
}
- if (role == null)
- {
- return false;
- }
- for (Group group : groupset)
- {
- RoleSet roles = getRoles(group);
- if (roles != null && roles.contains(role))
- {
- return true;
- }
- }
- return false;
}
/**
@@ -288,7 +290,7 @@ public class TurbineAccessControlListImp
{
try
{
- return roleSet.containsName(role);
+ return hasRole(roleSet.getByName(role));
}
catch (Exception e)
{
@@ -438,7 +440,7 @@ public class TurbineAccessControlListImp
{
try
{
- return permissionSet.containsName(permission);
+ return hasPermission(permissionSet.getByName(permission));
}
catch (Exception e)
{
Added: turbine/fulcrum/trunk/security/api/src/test/TurbineACLRoleConfig.xml
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/TurbineACLRoleConfig.xml?rev=1382699&view=auto
==============================================================================
--- turbine/fulcrum/trunk/security/api/src/test/TurbineACLRoleConfig.xml (added)
+++ turbine/fulcrum/trunk/security/api/src/test/TurbineACLRoleConfig.xml Mon
Sep 10 08:55:44 2012
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<!-- This configuration file for Avalon components is used for testing the
TestComponent -->
+<role-list>
+ <role
+ name="org.apache.fulcrum.security.model.ACLFactory"
+ shorthand="acl"
+
default-class="org.apache.fulcrum.security.model.turbine.TurbineACLFactory"/>
+</role-list>
Propchange: turbine/fulcrum/trunk/security/api/src/test/TurbineACLRoleConfig.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/ACLFactoryTest.java
URL:
http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/ACLFactoryTest.java?rev=1382699&r1=1382698&r2=1382699&view=diff
==============================================================================
---
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/ACLFactoryTest.java
(original)
+++
turbine/fulcrum/trunk/security/api/src/test/org/apache/fulcrum/security/model/ACLFactoryTest.java
Mon Sep 10 08:55:44 2012
@@ -34,10 +34,20 @@ import org.apache.fulcrum.security.model
import
org.apache.fulcrum.security.model.dynamic.entity.impl.DynamicPermissionImpl;
import org.apache.fulcrum.security.model.dynamic.entity.impl.DynamicRoleImpl;
import org.apache.fulcrum.security.model.dynamic.entity.impl.DynamicUserImpl;
+import org.apache.fulcrum.security.model.turbine.TurbineAccessControlList;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineGroup;
+import org.apache.fulcrum.security.model.turbine.entity.TurbinePermission;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineRole;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineUser;
+import org.apache.fulcrum.security.model.turbine.entity.TurbineUserGroupRole;
+import org.apache.fulcrum.security.model.turbine.entity.impl.TurbineGroupImpl;
+import
org.apache.fulcrum.security.model.turbine.entity.impl.TurbinePermissionImpl;
+import org.apache.fulcrum.security.model.turbine.entity.impl.TurbineRoleImpl;
+import org.apache.fulcrum.security.model.turbine.entity.impl.TurbineUserImpl;
import org.apache.fulcrum.testcontainer.BaseUnitTest;
/**
- *
+ *
* @author <a href="mailto:[email protected]">Eric Pugh</a>
* @version $Id$
*/
@@ -49,6 +59,36 @@ public class ACLFactoryTest extends Base
super(arg0);
}
+ public void testCreatingTurbineACL() throws Exception
+ {
+ this.setRoleFileName("src/test/TurbineACLRoleConfig.xml");
+ this.setConfigurationFileName("src/test/ACLComponentConfig.xml");
+
+ ACLFactory factory = (ACLFactory) lookup(ACLFactory.ROLE);
+ TurbineUser user = new TurbineUserImpl();
+ user.setName("bob");
+ user.setId(new Integer(1));
+ TurbineGroup group = new TurbineGroupImpl();
+ group.setName("group1");
+ group.setId(new Integer(1));
+ TurbineRole role = new TurbineRoleImpl();
+ role.setName("role1");
+ role.setId(new Integer(1));
+ TurbinePermission permission = new TurbinePermissionImpl();
+ permission.setName("permission1");
+ permission.setId(new Integer(1));
+ role.addPermission(permission);
+ TurbineUserGroupRole ugr = new TurbineUserGroupRole();
+ ugr.setGroup(group);
+ ugr.setRole(role);
+ ugr.setUser(user);
+ user.addUserGroupRole(ugr);
+ AccessControlList acl = factory.getAccessControlList(user);
+ assertTrue(acl instanceof TurbineAccessControlList);
+ TurbineAccessControlList tacl = (TurbineAccessControlList) acl;
+ assertTrue(tacl.hasPermission(permission, group));
+ }
+
public void testCreatingDynamicACL() throws Exception
{
this.setRoleFileName("src/test/DynamicACLRoleConfig.xml");
@@ -74,7 +114,6 @@ public class ACLFactoryTest extends Base
assertTrue(acl instanceof DynamicAccessControlList);
DynamicAccessControlList dacl = (DynamicAccessControlList) acl;
assertTrue(dacl.hasPermission(permission));
-
}
public void testCreatingBasicACL() throws Exception
@@ -94,7 +133,5 @@ public class ACLFactoryTest extends Base
assertTrue(acl instanceof BasicAccessControlList);
BasicAccessControlList bacl = (BasicAccessControlList) acl;
assertTrue(bacl.hasGroup(group));
-
}
-
}