You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ca...@apache.org on 2006/09/08 07:47:33 UTC
svn commit: r441385 - in
/maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src:
main/java/org/apache/maven/continuum/security/acegi/acl/
test/java/org/apache/maven/continuum/security/acegi/acl/
test/resources/org/apa...
Author: carlos
Date: Thu Sep 7 22:47:32 2006
New Revision: 441385
URL: http://svn.apache.org/viewvc?view=rev&rev=441385
Log:
Added AclManager to maven-user
Added:
maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.java (with props)
maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/resources/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.xml (with props)
Modified:
maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandler.java
Modified: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandler.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandler.java?view=diff&rev=441385&r1=441384&r2=441385
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandler.java (original)
+++ maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandler.java Thu Sep 7 22:47:32 2006
@@ -20,7 +20,7 @@
import java.util.Iterator;
import java.util.List;
-import org.acegisecurity.acl.basic.BasicAclExtendedDao;
+import org.acegisecurity.acl.basic.BasicAclEntry;
import org.acegisecurity.acl.basic.NamedEntityObjectIdentity;
import org.acegisecurity.acl.basic.SimpleAclEntry;
import org.acegisecurity.context.SecurityContextHolder;
@@ -28,6 +28,7 @@
import org.apache.maven.continuum.model.project.Project;
import org.apache.maven.continuum.model.project.ProjectGroup;
import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult;
+import org.apache.maven.user.acegi.AclManager;
/**
* Utility class to handle ACL manipulation on Continuum events, like adding or
@@ -37,19 +38,9 @@
* @version $Id$
*/
public class AclEventHandler
+ extends AclManager
{
-
- private BasicAclExtendedDao aclDao;
-
- public void setAclDao( BasicAclExtendedDao aclDao )
- {
- this.aclDao = aclDao;
- }
-
- public BasicAclExtendedDao getAclDao()
- {
- return aclDao;
- }
+ public static final String ROLE = AclEventHandler.class.getName();
/**
* Create ACLs for new {@link ProjectGroup} and {@link Project}s
@@ -76,13 +67,11 @@
/**
* Delete {@link ProjectGroup} ACLs
*
- * @TODO should this cascade delete all the children ACLs ?
- *
* @param projectGroupId
*/
public void afterDeleteProjectGroup( int projectGroupId )
{
- getAclDao().delete( createProjectGroupObjectIdentity( projectGroupId ) );
+ delete( ProjectGroup.class, projectGroupId );
}
/**
@@ -90,7 +79,7 @@
*
* @param projectGroups
*/
- private void createNewProjectGroupsACLs( Collection projectGroups )
+ protected void createNewProjectGroupsACLs( Collection projectGroups )
{
Iterator it = projectGroups.iterator();
while ( it.hasNext() )
@@ -105,7 +94,7 @@
*
* @param projectGroup
*/
- private void createNewProjectGroupACL( ProjectGroup projectGroup )
+ protected void createNewProjectGroupACL( ProjectGroup projectGroup )
{
User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
SimpleAclEntry aclEntry = new SimpleAclEntry();
@@ -113,7 +102,7 @@
aclEntry.setRecipient( user.getUsername() );
aclEntry.setAclObjectParentIdentity( AclInitializer.PARENT_PROJECT_GROUP_ACL_ID );
aclEntry.addPermission( SimpleAclEntry.ADMINISTRATION );
- getAclDao().create( aclEntry );
+ create( aclEntry );
}
/**
@@ -121,7 +110,7 @@
*
* @param projects
*/
- private void createNewProjectsACLs( Collection projects, ProjectGroup projectGroup )
+ protected void createNewProjectsACLs( Collection projects, ProjectGroup projectGroup )
{
Iterator it = projects.iterator();
while ( it.hasNext() )
@@ -137,13 +126,24 @@
* @param project
* @param projectGroup group the projects belong to
*/
- private void createNewProjectACL( Project project, ProjectGroup projectGroup )
+ protected void createNewProjectACL( Project project, ProjectGroup projectGroup )
{
NamedEntityObjectIdentity projectGroupIdentity = createProjectGroupObjectIdentity( projectGroup.getId() );
SimpleAclEntry aclEntry = new SimpleAclEntry();
aclEntry.setAclObjectIdentity( createProjectObjectIdentity( project.getId() ) );
aclEntry.setAclObjectParentIdentity( projectGroupIdentity );
- getAclDao().create( aclEntry );
+ create( aclEntry );
+ }
+
+ public void setProjectGroupPermissions( int projectGroupId, String userName, int permissions )
+ {
+ super.setPermissions( ProjectGroup.class, projectGroupId, userName, permissions,
+ AclInitializer.PARENT_PROJECT_GROUP_ACL_ID );
+ }
+
+ public BasicAclEntry getProjectGroupAcl( int projectGroupId, String userName )
+ {
+ return getAcl( ProjectGroup.class, projectGroupId, userName );
}
private NamedEntityObjectIdentity createProjectObjectIdentity( int projectId )
@@ -156,8 +156,8 @@
return createObjectIdentity( ProjectGroup.class, projectGroupId );
}
- private NamedEntityObjectIdentity createObjectIdentity( Class clazz, int id )
+ public BasicAclEntry[] getProjectGroupAcls( int projectGroupId )
{
- return new NamedEntityObjectIdentity( clazz.getName(), Integer.toString( id ) );
+ return getAcls( ProjectGroup.class, projectGroupId );
}
}
Added: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.java
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.java?view=auto&rev=441385
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.java (added)
+++ maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.java Thu Sep 7 22:47:32 2006
@@ -0,0 +1,107 @@
+package org.apache.maven.continuum.security.acegi.acl;
+
+/*
+ * Copyright 2006 The 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.
+ */
+
+import org.acegisecurity.GrantedAuthority;
+import org.acegisecurity.acl.basic.BasicAclEntry;
+import org.acegisecurity.acl.basic.SimpleAclEntry;
+import org.acegisecurity.context.SecurityContextHolder;
+import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
+import org.acegisecurity.userdetails.User;
+import org.acegisecurity.userdetails.UserDetails;
+import org.apache.maven.continuum.model.project.Project;
+import org.apache.maven.continuum.model.project.ProjectGroup;
+import org.codehaus.plexus.PlexusTestCase;
+
+/**
+ * Test for {@link AclEventHandler}.
+ *
+ * @author <a href="mailto:carlos@apache.org">Carlos Sanchez</a>
+ * @version $Id$
+ */
+public class AclEventHandlerTest
+ extends PlexusTestCase
+{
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ }
+
+ public void testAcls()
+ throws Exception
+ {
+ lookup( AclInitializer.ROLE );
+ AclEventHandler eventHandler = (AclEventHandler) lookup( AclEventHandler.ROLE );
+
+ ProjectGroup projectGroup = new ProjectGroup();
+ projectGroup.setId( 1 );
+
+ BasicAclEntry[] acls = eventHandler.getProjectGroupAcls( projectGroup.getId() );
+ if ( acls != null )
+ {
+ eventHandler.afterDeleteProjectGroup( projectGroup.getId() );
+ }
+
+ String user1 = "user1";
+ setUser( user1 );
+
+ eventHandler.createNewProjectGroupACL( projectGroup );
+
+ String user2 = "user2";
+ setUser( user2 );
+
+ /* set permissions to create for user 2 */
+ eventHandler.setProjectGroupPermissions( projectGroup.getId(), user2, SimpleAclEntry.CREATE );
+
+ SimpleAclEntry acl = (SimpleAclEntry) eventHandler.getProjectGroupAcl( projectGroup.getId(), user2 );
+ assertEquals( SimpleAclEntry.CREATE, acl.getMask() );
+
+ /* set permissions to delete for user 2 */
+ eventHandler.setProjectGroupPermissions( projectGroup.getId(), user2, SimpleAclEntry.DELETE );
+
+ acl = (SimpleAclEntry) eventHandler.getProjectGroupAcl( projectGroup.getId(), user2 );
+ assertEquals( SimpleAclEntry.DELETE, acl.getMask() );
+
+ Project project = new Project();
+ project.setId( 1 );
+ eventHandler.createNewProjectACL( project, projectGroup );
+
+ acls = eventHandler.getProjectGroupAcls( projectGroup.getId() );
+
+ assertEquals( "Wrong number of ACLs for ProjectGroup", 2, acls.length );
+
+ for ( int i = 0; i < acls.length; i++ )
+ {
+ acl = (SimpleAclEntry) acls[i];
+ System.out.println( acl.getRecipient() + " - " + acl.printPermissionsBlock() );
+ }
+
+ /* check that user that created ProjectGroup keeps its admin permission */
+ acl = (SimpleAclEntry) eventHandler.getProjectGroupAcl( projectGroup.getId(), user1 );
+ assertEquals( SimpleAclEntry.ADMINISTRATION, acl.getMask() );
+ }
+
+ private void setUser( String username )
+ {
+ UserDetails userDetails = new User( username, "", true, true, true, true, new GrantedAuthority[0] );
+ SecurityContextHolder.getContext().setAuthentication(
+ new UsernamePasswordAuthenticationToken( userDetails,
+ null, null ) );
+ }
+}
Propchange: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/java/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/resources/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.xml
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/resources/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.xml?view=auto&rev=441385
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/resources/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.xml (added)
+++ maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/resources/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.xml Thu Sep 7 22:47:32 2006
@@ -0,0 +1,29 @@
+<plexus>
+
+ <components>
+
+ <component>
+ <role>javax.sql.DataSource</role>
+ <implementation>org.apache.commons.dbcp.BasicDataSource</implementation>
+ <configuration>
+ <driverClassName>org.apache.derby.jdbc.EmbeddedDriver</driverClassName>
+ <url>jdbc:derby:${plexus.home}/database-acl-event-handler;create=true</url>
+ <username>sa</username>
+ </configuration>
+ </component>
+
+ <component>
+ <role>org.codehaus.mojo.sql.SqlExecMojo</role>
+ <implementation>org.codehaus.mojo.sql.SqlExecMojo</implementation>
+ <configuration>
+ <username>sa</username>
+ <password></password>
+ <driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+ <url>jdbc:derby:${plexus.home}/database-acl-event-handler;create=true</url>
+ <onError>continue</onError>
+ </configuration>
+ </component>
+
+ </components>
+
+</plexus>
Propchange: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/resources/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/test/resources/org/apache/maven/continuum/security/acegi/acl/AclEventHandlerTest.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"