dlestrat 2004/09/29 21:01:42 Modified: components/security/src/java/org/apache/jetspeed/security/impl AggregationHierarchyResolver.java GeneralizationHierarchyResolver.java RoleManagerImpl.java components/security/src/java/org/apache/jetspeed/security/spi/impl DefaultSecurityMappingHandler.java components/security/src/test/org/apache/jetspeed/security TestRoleManager.java components/security/src/java/org/apache/jetspeed/security HierarchyResolver.java components/security/src/java/org/apache/jetspeed/security/spi SecurityMappingHandler.java Added: components/security/src/java/org/apache/jetspeed/security/impl BaseHierarchyResolver.java Log: Some progress on http://nagoya.apache.org/jira/browse/JS2-114 Revision Changes Path 1.4 +3 -35 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl/AggregationHierarchyResolver.java Index: AggregationHierarchyResolver.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl/AggregationHierarchyResolver.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- AggregationHierarchyResolver.java 19 Sep 2004 19:04:11 -0000 1.3 +++ AggregationHierarchyResolver.java 30 Sep 2004 04:01:41 -0000 1.4 @@ -14,9 +14,6 @@ */ package org.apache.jetspeed.security.impl; -import java.util.ArrayList; -import java.util.List; -import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import org.apache.commons.logging.Log; @@ -40,12 +37,13 @@ * <li>/role/roleA/roleB</li> * <li>/role/roleA/roleB/roleC</li> * </ul> + * </p> * * @author <a href="mailto:[EMAIL PROTECTED]">Artem Grinshtein </a> * @version $Id: AggregationHierarchyResolver.java,v 1.2 2004/09/18 19:33:58 * dlestrat Exp $ */ -public class AggregationHierarchyResolver implements HierarchyResolver +public class AggregationHierarchyResolver extends BaseHierarchyResolver implements HierarchyResolver { private static final Log log = LogFactory.getLog(AggregationHierarchyResolver.class); @@ -56,37 +54,7 @@ { ArgUtil.notNull(new Object[] { prefs }, new String[] { "preferences" }, "resolve(java.util.prefs.Preferences)"); - List list = new ArrayList(); - processPreferences(prefs, list); - return (String[]) list.toArray(new String[0]); - } - - /** - * <p> - * Recursively processes the preferences. - * </p> - * - * @param prefs The preferences. - * @param list The list to add the preferences to. - */ - protected void processPreferences(Preferences prefs, List list) - { - if (!list.contains(prefs.absolutePath())) - { - list.add(prefs.absolutePath()); - } - try - { - String[] names = prefs.childrenNames(); - for (int i = 0; i < names.length; i++) - { - processPreferences(prefs.node(names[i]), list); - } - } - catch (BackingStoreException bse) - { - log.warn("can't find children of " + prefs.absolutePath(), bse); - } + return resolveChildren(prefs); } } 1.4 +2 -1 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl/GeneralizationHierarchyResolver.java Index: GeneralizationHierarchyResolver.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl/GeneralizationHierarchyResolver.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- GeneralizationHierarchyResolver.java 19 Sep 2004 19:04:11 -0000 1.3 +++ GeneralizationHierarchyResolver.java 30 Sep 2004 04:01:41 -0000 1.4 @@ -32,12 +32,13 @@ * <li>/role/roleA/roleB</li> * <li>/role/roleA/roleB/roleC</li> * </ul> + * </p> * * @author <a href="mailto:[EMAIL PROTECTED]">Artem Grinshtein </a> * @version $Id: GeneralizationHierarchyResolver.java,v 1.2 2004/09/18 19:33:58 * dlestrat Exp $ */ -public class GeneralizationHierarchyResolver implements HierarchyResolver +public class GeneralizationHierarchyResolver extends BaseHierarchyResolver implements HierarchyResolver { /** 1.9 +33 -80 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl/RoleManagerImpl.java Index: RoleManagerImpl.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl/RoleManagerImpl.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- RoleManagerImpl.java 28 Sep 2004 04:23:52 -0000 1.8 +++ RoleManagerImpl.java 30 Sep 2004 04:01:41 -0000 1.9 @@ -25,7 +25,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.jetspeed.components.persistence.store.Filter; import org.apache.jetspeed.components.persistence.store.PersistenceStore; import org.apache.jetspeed.security.Role; import org.apache.jetspeed.security.RoleManager; @@ -35,7 +34,6 @@ import org.apache.jetspeed.security.om.InternalGroupPrincipal; import org.apache.jetspeed.security.om.InternalRolePrincipal; import org.apache.jetspeed.security.om.InternalUserPrincipal; -import org.apache.jetspeed.security.om.impl.InternalRolePrincipalImpl; import org.apache.jetspeed.security.spi.RoleSecurityHandler; import org.apache.jetspeed.security.spi.SecurityMappingHandler; import org.apache.jetspeed.util.ArgUtil; @@ -146,73 +144,35 @@ ArgUtil.notNull(new Object[] { roleFullPathName }, new String[] { "roleFullPathName" }, "removeRole(java.lang.String)"); - InternalRolePrincipal omParentRole = super.getJetspeedRolePrincipal(roleFullPathName); - if (null != omParentRole) + // Resolve the role hierarchy. + Preferences prefs = Preferences.userRoot().node( + RolePrincipalImpl.getFullPathFromPrincipalName(roleFullPathName)); + String[] roles = securityMappingHandler.getRoleHierarchyResolver().resolveChildren(prefs); + for (int i = 0; i < roles.length; i++) { - PersistenceStore store = getPersistenceStore(); - Filter filter = store.newFilter(); - filter.addLike((Object) new String("fullPath"), (Object) (omParentRole.getFullPath() + "/*")); - Object query = store.newQuery(InternalRolePrincipalImpl.class, filter); - Collection omRoles = store.getCollectionByQuery(query); - if (null == omRoles) - { - omRoles = new ArrayList(); - } - omRoles.add(omParentRole); - // Remove each role in the collection. - Iterator omRolesIterator = omRoles.iterator(); - while (omRolesIterator.hasNext()) - { - InternalRolePrincipal omRole = (InternalRolePrincipal) omRolesIterator.next(); - // TODO This should be managed in a transaction. - Collection omUsers = omRole.getUserPrincipals(); - if (null != omUsers) - { - omUsers.clear(); - } - Collection omGroups = omRole.getGroupPrincipals(); - if (null != omGroups) - { - omGroups.clear(); - } - Collection omPermissions = omRole.getPermissions(); - if (null != omPermissions) - { - omPermissions.clear(); - } - - try - { - // TODO Can this be done in one shot? - // Remove dependencies. - store.lockForWrite(omRole); - omRole.setModifiedDate(new Timestamp(System.currentTimeMillis())); - omRole.setUserPrincipals(omUsers); - omRole.setGroupPrincipals(omGroups); - omRole.setPermissions(omPermissions); - store.getTransaction().checkpoint(); - - // Remove role. - store.deletePersistent(omRole); - store.getTransaction().checkpoint(); - } - catch (Exception e) - { - String msg = "Unable to lock Role for update."; - log.error(msg, e); - store.getTransaction().rollback(); - throw new SecurityException(msg, e); - } - // Remove preferences - Preferences preferences = Preferences.userRoot().node(omRole.getFullPath()); - try - { - preferences.removeNode(); - } - catch (BackingStoreException bse) - { - bse.printStackTrace(); - } + try + { + roleSecurityHandler.removeRolePrincipal(new RolePrincipalImpl(RolePrincipalImpl + .getPrincipalNameFromFullPath((String) roles[i]))); + } + catch (Exception e) + { + String msg = "Unable to remove role: " + + RolePrincipalImpl.getPrincipalNameFromFullPath((String) roles[i]); + log.error(msg, e); + throw new SecurityException(msg, e); + } + // Remove preferences + Preferences rolePref = Preferences.userRoot().node((String) roles[i]); + try + { + rolePref.removeNode(); + } + catch (BackingStoreException bse) + { + String msg = "Unable to remove role preferences: " + roles[i]; + log.error(msg, bse); + throw new SecurityException(msg, bse); } } } @@ -500,20 +460,13 @@ boolean isGroupInRole = false; - InternalGroupPrincipal omGroup = super.getJetspeedGroupPrincipal(groupFullPathName); - if (null == omGroup) - { - throw new SecurityException(SecurityException.GROUP_DOES_NOT_EXIST + " " + groupFullPathName); - } - InternalRolePrincipal omRole = super.getJetspeedRolePrincipal(roleFullPathName); - if (null != omRole) + Set rolePrincipals = securityMappingHandler.getRolePrincipalsInGroup(groupFullPathName); + Principal rolePrincipal = new RolePrincipalImpl(roleFullPathName); + if (rolePrincipals.contains(rolePrincipal)) { - Collection omRoles = omGroup.getRolePrincipals(); - if ((null != omRoles) && (omRoles.contains(omRole))) - { - isGroupInRole = true; - } + isGroupInRole = true; } + return isGroupInRole; } 1.1 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl/BaseHierarchyResolver.java Index: BaseHierarchyResolver.java =================================================================== /* Copyright 2004 Apache Software Foundation * * Licensed 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. */ package org.apache.jetspeed.security.impl; import java.util.ArrayList; import java.util.List; import java.util.prefs.BackingStoreException; import java.util.prefs.Preferences; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.jetspeed.util.ArgUtil; /** * <p> * Base implementation for the hierarchy resolver. * <p> * * @author <a href="mailto:[EMAIL PROTECTED]">David Le Strat</a> */ public class BaseHierarchyResolver { /** The logger. */ private static final Log log = LogFactory.getLog(BaseHierarchyResolver.class); /** * @see org.apache.jetspeed.security.HierarchyResolver#resolveChildren(java.util.prefs.Preferences) */ public String[] resolveChildren(Preferences prefs) { ArgUtil.notNull(new Object[] { prefs }, new String[] { "preferences" }, "resolveChildren(java.util.prefs.Preferences)"); List children = new ArrayList(); processPreferences(prefs, children); return (String[]) children.toArray(new String[0]); } /** * <p> * Recursively processes the preferences. * </p> * * @param prefs The preferences. * @param list The list to add the preferences to. */ protected void processPreferences(Preferences prefs, List list) { if (!list.contains(prefs.absolutePath())) { list.add(prefs.absolutePath()); } try { String[] names = prefs.childrenNames(); for (int i = 0; i < names.length; i++) { processPreferences(prefs.node(names[i]), list); } } catch (BackingStoreException bse) { log.warn("can't find children of " + prefs.absolutePath(), bse); } } } 1.2 +27 -2 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultSecurityMappingHandler.java Index: DefaultSecurityMappingHandler.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/spi/impl/DefaultSecurityMappingHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DefaultSecurityMappingHandler.java 19 Sep 2004 19:04:11 -0000 1.1 +++ DefaultSecurityMappingHandler.java 30 Sep 2004 04:01:41 -0000 1.2 @@ -76,15 +76,31 @@ this.groupHierarchyResolver = groupHierarchyResolver; } } - + + /** + * @return Returns the roleHierarchyResolver. + */ + public HierarchyResolver getRoleHierarchyResolver() + { + return roleHierarchyResolver; + } + /** * @see org.apache.jetspeed.security.spi.SecurityMappingHandler#setRoleHierarchyResolver(org.apache.jetspeed.security.HierarchyResolver) */ public void setRoleHierarchyResolver(HierarchyResolver roleHierarchyResolver) { this.roleHierarchyResolver = roleHierarchyResolver; + } + + /** + * @return Returns the groupHierarchyResolver. + */ + public HierarchyResolver getGroupHierarchyResolver() + { + return groupHierarchyResolver; } - + /** * @see org.apache.jetspeed.security.spi.SecurityMappingHandler#setGroupHierarchyResolver(org.apache.jetspeed.security.HierarchyResolver) */ @@ -126,6 +142,15 @@ return rolePrincipals; } + /** + * @see org.apache.jetspeed.security.spi.SecurityMappingHandler#setRolePrincipals(java.lang.String, java.util.Set) + */ + public void setRolePrincipals(String username, Set rolePrincipals) + { + // TODO Auto-generated method stub + + } + /** * @see org.apache.jetspeed.security.spi.SecurityMappingHandler#getRolePrincipalsInGroup(java.lang.String) */ 1.10 +296 -299 jakarta-jetspeed-2/components/security/src/test/org/apache/jetspeed/security/TestRoleManager.java Index: TestRoleManager.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/test/org/apache/jetspeed/security/TestRoleManager.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- TestRoleManager.java 25 Sep 2004 23:03:17 -0000 1.9 +++ TestRoleManager.java 30 Sep 2004 04:01:41 -0000 1.10 @@ -24,16 +24,21 @@ import org.apache.jetspeed.security.impl.RolePrincipalImpl; /** - * <p>Unit testing for [EMAIL PROTECTED] RoleManager}.</p> - * - * @author <a href="mailto:[EMAIL PROTECTED]">David Le Strat</a> + * <p> + * Unit testing for [EMAIL PROTECTED] RoleManager}. + * </p> + * + * @author <a href="mailto:[EMAIL PROTECTED]">David Le Strat </a> * @version $Id$ */ public class TestRoleManager extends AbstractSecurityTestcase { /** - * <p>Defines the test case name for junit.</p> + * <p> + * Defines the test case name for junit. + * </p> + * * @param testName The test case name. */ public TestRoleManager(String testName) @@ -54,7 +59,7 @@ * @see junit.framework.TestCase#tearDown() */ public void tearDown() throws Exception - { + { destroyRoles(); super.tearDown(); } @@ -64,9 +69,11 @@ // All methods starting with "test" will be executed in the test suite. return new TestSuite(TestRoleManager.class); } - + /** - * <p>Test add role.</p> + * <p> + * Test add role. + * </p> */ public void testAddRole() { @@ -107,7 +114,9 @@ } /** - * <p>Test add user to role.</p> + * <p> + * Test add user to role. + * </p> */ public void testAddRoleToUser() { @@ -127,11 +136,10 @@ try { rms.addRoleToUser("anonuser1", "testusertorole1.role1"); - + Collection principals = ums.getUser("anonuser1").getSubject().getPrincipals(); - assertTrue( - "anonuser1 should contain testusertorole1.role1", - principals.contains(new RolePrincipalImpl("testusertorole1.role1"))); + assertTrue("anonuser1 should contain testusertorole1.role1", principals.contains(new RolePrincipalImpl( + "testusertorole1.role1"))); } catch (SecurityException sex) { @@ -142,9 +150,8 @@ { rms.addRoleToUser("anonuser1", "testusertorole1.role2"); Collection principals = ums.getUser("anonuser1").getSubject().getPrincipals(); - assertTrue( - "anonuser1 should contain testusertorole1.role2", - principals.contains(new RolePrincipalImpl("testusertorole1.role2"))); + assertTrue("anonuser1 should contain testusertorole1.role2", principals.contains(new RolePrincipalImpl( + "testusertorole1.role2"))); } catch (SecurityException sex) { @@ -182,7 +189,9 @@ } /** - * <p>Test remove role.</p> + * <p> + * Test remove role. + * </p> */ public void testRemoveRole() { @@ -210,13 +219,10 @@ rms.removeRole("testrole1.role1"); Collection principals = ums.getUser("anonuser2").getSubject().getPrincipals(); // because of hierarchical roles with generalization strategy. - assertEquals( - "principal size should be == 5 after removing testrole1.role1, for principals: " + principals.toString(), - 5, - principals.size()); - assertFalse( - "anonuser2 should not contain testrole1.role1", - principals.contains(new RolePrincipalImpl("testrole1.role1"))); + assertEquals("principal size should be == 5 after removing testrole1.role1, for principals: " + + principals.toString(), 5, principals.size()); + assertFalse("anonuser2 should not contain testrole1.role1", principals.contains(new RolePrincipalImpl( + "testrole1.role1"))); // Make sure that the children are removed as well. rms.removeRole("testrole2"); boolean roleExists = rms.roleExists("testrole2.role1"); @@ -242,7 +248,9 @@ } /** - * <p>Test get role.</p> + * <p> + * Test get role. + * </p> */ public void testGetRole() { @@ -274,10 +282,8 @@ // Test the Role Preferences. Preferences preferences = role.getPreferences(); - assertEquals( - "expected role node == /role/testgetrole", - SecurityHelper.getPreferencesFullPath(rolePrincipal), - preferences.absolutePath()); + assertEquals("expected role node == /role/testgetrole", SecurityHelper.getPreferencesFullPath(rolePrincipal), + preferences.absolutePath()); // Cleanup test. try @@ -290,268 +296,279 @@ } } - /** - * <p>Test get roles for user.</p> - */ - public void testGetRolesForUser() + /** + * <p> + * Test get roles for user. + * </p> + */ + public void testGetRolesForUser() + { + // Init test. + try { - // Init test. - try - { - ums.addUser("anonuser3", "password"); - rms.addRole("testuserrolemapping"); - rms.addRole("testuserrolemapping.role1"); - rms.addRole("testuserrolemapping2.role2"); - rms.addRoleToUser("anonuser3", "testuserrolemapping"); - rms.addRoleToUser("anonuser3", "testuserrolemapping.role1"); - rms.addRoleToUser("anonuser3", "testuserrolemapping2.role2"); - } - catch (SecurityException sex) - { - assertTrue("failed to init testGetRolesForUser(), " + sex, false); - } - - try - { - Collection roles = rms.getRolesForUser("anonuser3"); - assertEquals("roles size should be == 4", 4, roles.size()); - } - catch (SecurityException sex) - { - assertTrue("user exists. should not have thrown an exception: " + sex, false); - } - - // Cleanup test. - try - { - ums.removeUser("anonuser3"); - rms.removeRole("testuserrolemapping"); - rms.removeRole("testuserrolemapping2"); - } - catch (SecurityException sex) - { - assertTrue("could not remove user and role. exception caught: " + sex, false); - } + ums.addUser("anonuser3", "password"); + rms.addRole("testuserrolemapping"); + rms.addRole("testuserrolemapping.role1"); + rms.addRole("testuserrolemapping2.role2"); + rms.addRoleToUser("anonuser3", "testuserrolemapping"); + rms.addRoleToUser("anonuser3", "testuserrolemapping.role1"); + rms.addRoleToUser("anonuser3", "testuserrolemapping2.role2"); } - - /** - * <p>Test get roles in group.</p> - */ - public void testGetRolesInGroup() + catch (SecurityException sex) { - // Init test. - try - { - rms.addRole("testuserrolemapping"); - rms.addRole("testuserrolemapping.role1"); - rms.addRole("testuserrolemapping.role3"); - gms.addGroup("testrolegroupmapping"); - rms.addRoleToGroup("testuserrolemapping", "testrolegroupmapping"); - rms.addRoleToGroup("testuserrolemapping.role1", "testrolegroupmapping"); - rms.addRoleToGroup("testuserrolemapping.role3", "testrolegroupmapping"); - } - catch (SecurityException sex) - { - assertTrue("failed to init testGetRolesForGroup(), " + sex, false); - } - - try - { - Collection roles = rms.getRolesInGroup("testrolegroupmapping"); - assertEquals("roles size should be == 3", 3, roles.size()); - } - catch (SecurityException sex) - { - assertTrue("group exists. should not have thrown an exception: " + sex, false); - } - - // Cleanup test. - try - { - rms.removeRole("testuserrolemapping"); - gms.removeGroup("testrolegroupmapping"); - } - catch (SecurityException sex) - { - assertTrue("could not remove role and group. exception caught: " + sex, false); - } + assertTrue("failed to init testGetRolesForUser(), " + sex, false); } - - /** - * <p>Test remove role from user.</p> - */ - public void testRemoveRoleFromUser() + + try { - // Init test. - try - { - ums.addUser("anonuser5", "password"); - rms.addRole("testrole3"); - rms.addRoleToUser("anonuser5", "testrole3"); - } - catch (SecurityException sex) - { - assertTrue("failed to init testRemoveRoleFromUser(), " + sex, false); - } - - try - { - rms.removeRoleFromUser("anonuser5", "testrole3"); - Collection roles = rms.getRolesForUser("anonuser5"); - assertEquals("roles size should be == 0", 0, roles.size()); - } - catch (SecurityException sex) - { - assertTrue("user exists. should not have thrown an exception: " + sex, false); - } - - // Cleanup test. - try - { - ums.removeUser("anonuser5"); - rms.removeRole("testrole3"); - } - catch (SecurityException sex) - { - assertTrue("could not remove user and role. exception caught: " + sex, false); - } + Collection roles = rms.getRolesForUser("anonuser3"); + assertEquals("roles size should be == 4", 4, roles.size()); } - - /** - * <p>Test is user in role.</p> - */ - public void testIsUserInRole() + catch (SecurityException sex) { - // Init test. - try - { - ums.addUser("anonuser4", "password"); - rms.addRole("testuserrolemapping"); - rms.addRoleToUser("anonuser4", "testuserrolemapping"); - } - catch (SecurityException sex) - { - assertTrue("failed to init testIsUserInRole(), " + sex, false); - } - - try - { - boolean isUserInRole = rms.isUserInRole("anonuser4", "testuserrolemapping"); - assertTrue("anonuser4 should be in role testuserrolemapping", isUserInRole); - } - catch (SecurityException sex) - { - assertTrue("user and role exist. should not have thrown an exception: " + sex, false); - } - - // Cleanup test. - try - { - ums.removeUser("anonuser4"); - rms.removeRole("testuserrolemapping"); - } - catch (SecurityException sex) - { - assertTrue("could not remove user and role. exception caught: " + sex, false); - } + assertTrue("user exists. should not have thrown an exception: " + sex, false); } - - /** - * <p>Test remove role from group.</p> - */ - public void testRemoveRoleFromGroup() + + // Cleanup test. + try { - // Init test. - try - { - rms.addRole("testuserrolemapping"); - rms.addRole("testuserrolemapping.role1"); - rms.addRole("testuserrolemapping.role3"); - gms.addGroup("testrolegroupmapping"); - rms.addRoleToGroup("testuserrolemapping", "testrolegroupmapping"); - rms.addRoleToGroup("testuserrolemapping.role1", "testrolegroupmapping"); - rms.addRoleToGroup("testuserrolemapping.role3", "testrolegroupmapping"); - } - catch (SecurityException sex) - { - assertTrue("failed to init testRemoveRoleFromGroup(), " + sex, false); - } - - try - { - rms.removeRoleFromGroup("testuserrolemapping.role3", "testrolegroupmapping"); - Collection roles = rms.getRolesInGroup("testrolegroupmapping"); - assertEquals("roles size should be == 2", 2, roles.size()); - } - catch (SecurityException sex) - { - assertTrue("group exists. should not have thrown an exception: " + sex, false); - } - - // Cleanup test. - try - { - rms.removeRole("testuserrolemapping"); - gms.removeGroup("testrolegroupmapping"); - } - catch (SecurityException sex) - { - assertTrue("could not remove group and role. exception caught: " + sex, false); - } + ums.removeUser("anonuser3"); + rms.removeRole("testuserrolemapping"); + rms.removeRole("testuserrolemapping2"); } - - /** - * <p>Test is user in role.</p> - */ - public void testIsGroupInRole() + catch (SecurityException sex) { - // Init test. - try - { - rms.addRole("testuserrolemapping"); - gms.addGroup("testrolegroupmapping"); - rms.addRoleToGroup("testuserrolemapping", "testrolegroupmapping"); - } - catch (SecurityException sex) - { - assertTrue("failed to init testIsGroupInRole(), " + sex, false); - } - try - { - boolean isGroupInRole = rms.isGroupInRole("testrolegroupmapping", "testuserrolemapping"); - assertTrue("testrolegroupmapping should be in role testuserrolemapping", isGroupInRole); - } - catch (SecurityException sex) - { - assertTrue("group and role exist. should not have thrown an exception: " + sex, false); - } - - // Cleanup test. - try - { - rms.removeRole("testuserrolemapping"); - gms.removeGroup("testrolegroupmapping"); - } - catch (SecurityException sex) - { - assertTrue("could not remove role and group. exception caught: " + sex, false); - } + assertTrue("could not remove user and role. exception caught: " + sex, false); } + } /** - * <p>Destroy role test objects.</p> + * <p> + * Test get roles in group. + * </p> + */ + public void testGetRolesInGroup() + { + // Init test. + try + { + rms.addRole("testuserrolemapping"); + rms.addRole("testuserrolemapping.role1"); + rms.addRole("testuserrolemapping.role3"); + gms.addGroup("testrolegroupmapping"); + rms.addRoleToGroup("testuserrolemapping", "testrolegroupmapping"); + rms.addRoleToGroup("testuserrolemapping.role1", "testrolegroupmapping"); + rms.addRoleToGroup("testuserrolemapping.role3", "testrolegroupmapping"); + } + catch (SecurityException sex) + { + assertTrue("failed to init testGetRolesForGroup(), " + sex, false); + } + + try + { + Collection roles = rms.getRolesInGroup("testrolegroupmapping"); + assertEquals("roles size should be == 3", 3, roles.size()); + } + catch (SecurityException sex) + { + assertTrue("group exists. should not have thrown an exception: " + sex, false); + } + + // Cleanup test. + try + { + rms.removeRole("testuserrolemapping"); + gms.removeGroup("testrolegroupmapping"); + } + catch (SecurityException sex) + { + assertTrue("could not remove role and group. exception caught: " + sex, false); + } + } + + /** + * <p> + * Test remove role from user. + * </p> + */ + public void testRemoveRoleFromUser() + { + // Init test. + try + { + ums.addUser("anonuser5", "password"); + rms.addRole("testrole3"); + rms.addRoleToUser("anonuser5", "testrole3"); + } + catch (SecurityException sex) + { + assertTrue("failed to init testRemoveRoleFromUser(), " + sex, false); + } + + try + { + rms.removeRoleFromUser("anonuser5", "testrole3"); + Collection roles = rms.getRolesForUser("anonuser5"); + assertEquals("roles size should be == 0", 0, roles.size()); + } + catch (SecurityException sex) + { + assertTrue("user exists. should not have thrown an exception: " + sex, false); + } + + // Cleanup test. + try + { + ums.removeUser("anonuser5"); + rms.removeRole("testrole3"); + } + catch (SecurityException sex) + { + assertTrue("could not remove user and role. exception caught: " + sex, false); + } + } + + /** + * <p> + * Test is user in role. + * </p> + */ + public void testIsUserInRole() + { + // Init test. + try + { + ums.addUser("anonuser4", "password"); + rms.addRole("testuserrolemapping"); + rms.addRoleToUser("anonuser4", "testuserrolemapping"); + } + catch (SecurityException sex) + { + assertTrue("failed to init testIsUserInRole(), " + sex, false); + } + + try + { + boolean isUserInRole = rms.isUserInRole("anonuser4", "testuserrolemapping"); + assertTrue("anonuser4 should be in role testuserrolemapping", isUserInRole); + } + catch (SecurityException sex) + { + assertTrue("user and role exist. should not have thrown an exception: " + sex, false); + } + + // Cleanup test. + try + { + ums.removeUser("anonuser4"); + rms.removeRole("testuserrolemapping"); + } + catch (SecurityException sex) + { + assertTrue("could not remove user and role. exception caught: " + sex, false); + } + } + + /** + * <p> + * Test remove role from group. + * </p> + */ + public void testRemoveRoleFromGroup() + { + // Init test. + try + { + rms.addRole("testuserrolemapping"); + rms.addRole("testuserrolemapping.role1"); + rms.addRole("testuserrolemapping.role3"); + gms.addGroup("testrolegroupmapping"); + rms.addRoleToGroup("testuserrolemapping", "testrolegroupmapping"); + rms.addRoleToGroup("testuserrolemapping.role1", "testrolegroupmapping"); + rms.addRoleToGroup("testuserrolemapping.role3", "testrolegroupmapping"); + } + catch (SecurityException sex) + { + assertTrue("failed to init testRemoveRoleFromGroup(), " + sex, false); + } + + try + { + rms.removeRoleFromGroup("testuserrolemapping.role3", "testrolegroupmapping"); + Collection roles = rms.getRolesInGroup("testrolegroupmapping"); + assertEquals("roles size should be == 2", 2, roles.size()); + } + catch (SecurityException sex) + { + assertTrue("group exists. should not have thrown an exception: " + sex, false); + } + + // Cleanup test. + try + { + rms.removeRole("testuserrolemapping"); + gms.removeGroup("testrolegroupmapping"); + } + catch (SecurityException sex) + { + assertTrue("could not remove group and role. exception caught: " + sex, false); + } + } + + /** + * <p> + * Test is user in role. + * </p> + */ + public void testIsGroupInRole() + { + // Init test. + try + { + rms.addRole("testuserrolemapping"); + gms.addGroup("testrolegroupmapping"); + rms.addRoleToGroup("testuserrolemapping", "testrolegroupmapping"); + } + catch (SecurityException sex) + { + assertTrue("failed to init testIsGroupInRole(), " + sex, false); + } + try + { + boolean isGroupInRole = rms.isGroupInRole("testrolegroupmapping", "testuserrolemapping"); + assertTrue("testrolegroupmapping should be in role testuserrolemapping", isGroupInRole); + } + catch (SecurityException sex) + { + assertTrue("group and role exist. should not have thrown an exception: " + sex, false); + } + + // Cleanup test. + try + { + rms.removeRole("testuserrolemapping"); + gms.removeGroup("testrolegroupmapping"); + } + catch (SecurityException sex) + { + assertTrue("could not remove role and group. exception caught: " + sex, false); + } + } + + /** + * <p> + * Destroy role test objects. + * </p> */ protected void destroyRoles() { - final String[] users = new String []{"anonuser1", - "anonuser2", "anonuser3", "anonuser4", - "anonuser5", }; - final String[] roles = new String []{"testrole1", "testrole2", - "testrole3", "testgetrole", "testuserrolemapping", - "testusertorole1", "testuserrolemapping.role1", "testuserrolemapping2.role2"}; - final String[] groups = new String[] {"testusertorole1"}; - - for(int i=0; i<users.length; i++) + final String[] users = new String[] { "anonuser1", "anonuser2", "anonuser3", "anonuser4", "anonuser5", }; + final String[] roles = new String[] { "testrole1", "testrole2", "testrole3", "testgetrole", + "testuserrolemapping", "testusertorole1", "testuserrolemapping.role1", "testuserrolemapping2.role2" }; + final String[] groups = new String[] { "testusertorole1" }; + + for (int i = 0; i < users.length; i++) { try { @@ -562,8 +579,8 @@ System.err.println(e.toString()); } } - - for(int i=0; i<roles.length; i++) + + for (int i = 0; i < roles.length; i++) { try { @@ -574,8 +591,8 @@ System.err.println(e.toString()); } } - - for(int i=0; i<groups.length; i++) + + for (int i = 0; i < groups.length; i++) { try { @@ -586,26 +603,6 @@ System.err.println(e.toString()); } } - -// try -// { -// ums.removeUser("anonuser1"); -// ums.removeUser("anonuser2"); -// ums.removeUser("anonuser3"); -// ums.removeUser("anonuser4"); -// ums.removeUser("anonuser5"); -// rms.removeRole("testrole1"); -// rms.removeRole("testrole2"); -// rms.removeRole("testrole3"); -// rms.removeRole("testgetrole"); -// rms.removeRole("testuserrolemapping"); -// gms.removeGroup("testrolegroupmapping"); -// rms.removeRole("testusertorole1"); -// } -// catch (SecurityException sex) -// { -// assertTrue("could not remove user, group and role. exception caught: " + sex, false); -// } } -} +} \ No newline at end of file 1.2 +22 -5 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/HierarchyResolver.java Index: HierarchyResolver.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/HierarchyResolver.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- HierarchyResolver.java 18 Sep 2004 19:33:35 -0000 1.1 +++ HierarchyResolver.java 30 Sep 2004 04:01:42 -0000 1.2 @@ -17,18 +17,35 @@ import java.util.prefs.Preferences; /** - * <p>This class allows to implement different types of groups/roles hierarchy.</p> - * @author <a href="mailto:[EMAIL PROTECTED]">Artem Grinshtein</a> + * <p> + * This class allows to implement different types of groups/roles hierarchy. + * </p> + * + * @author <a href="mailto:[EMAIL PROTECTED]">Artem Grinshtein </a> * @version $Id$ */ public interface HierarchyResolver { /** - * <p>Returns absolute path names of the dependcy roles/groups.</p> + * <p> + * Returns absolute path names of the hierarchy roles/groups. + * </p> + * * @param prefs Preferences for the role/group * @return Returns absolute path names of the dependcy roles/groups. */ - public String[] resolve( Preferences prefs ); + public String[] resolve(Preferences prefs); + + /** + * <p> + * Returns the absolute path names of the children of the given hierarchy + * roles/groups node. + * </p> + * + * @param prefs Preferences for the role/group + * @return Returns absolute path names of the children roles/groups. + */ + public String[] resolveChildren(Preferences prefs); } 1.2 +29 -0 jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/spi/SecurityMappingHandler.java Index: SecurityMappingHandler.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/components/security/src/java/org/apache/jetspeed/security/spi/SecurityMappingHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- SecurityMappingHandler.java 19 Sep 2004 19:04:11 -0000 1.1 +++ SecurityMappingHandler.java 30 Sep 2004 04:01:42 -0000 1.2 @@ -34,6 +34,15 @@ /** * <p> + * Gets the [EMAIL PROTECTED] HierarchyResolver} to be used for resolving role hierarchy. + * </p> + * + * @return The role [EMAIL PROTECTED] HierarchyResolver}. + */ + HierarchyResolver getRoleHierarchyResolver(); + + /** + * <p> * Sets the [EMAIL PROTECTED] HierarchyResolver} to be used for resolving role hierachy. * </p> * @@ -43,6 +52,15 @@ /** * <p> + * Gets the [EMAIL PROTECTED] HierarchyResolver} to be used for resolving group hierarchy. + * </p> + * + * @return The role [EMAIL PROTECTED] HierarchyResolver}. + */ + HierarchyResolver getGroupHierarchyResolver(); + + /** + * <p> * Sets the [EMAIL PROTECTED] HierarchyResolver} used for resolving group hierarchy. * </p> * @@ -60,6 +78,17 @@ * @return A set of <code>Principal</p> */ Set getRolePrincipals(String username); + + /** + * <p> + * Sets the roles principals on a given user. The provided set replaces + * any set that may already have been set on the user. + * </p> + * + * @param username The user to add the roles principals to. + * @param rolePrincipals The roles principals to add. + */ + void setRolePrincipals(String username, Set rolePrincipals); /** * <p>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]