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/05 05:17:37 UTC

svn commit: r440233 - in /maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main: java/org/apache/maven/continuum/security/acegi/AcegiContinuum.java resources/META-INF/plexus/components.xml

Author: carlos
Date: Mon Sep  4 20:17:37 2006
New Revision: 440233

URL: http://svn.apache.org/viewvc?view=rev&rev=440233
Log:
Add first ACL creation code

Modified:
    maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/AcegiContinuum.java
    maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/resources/META-INF/plexus/components.xml

Modified: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/AcegiContinuum.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/AcegiContinuum.java?view=diff&rev=440233&r1=440232&r2=440233
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/AcegiContinuum.java (original)
+++ maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/java/org/apache/maven/continuum/security/acegi/AcegiContinuum.java Mon Sep  4 20:17:37 2006
@@ -18,9 +18,14 @@
 
 import java.io.File;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import org.acegisecurity.acl.basic.BasicAclExtendedDao;
+import org.acegisecurity.acl.basic.NamedEntityObjectIdentity;
+import org.acegisecurity.acl.basic.SimpleAclEntry;
+import org.acegisecurity.context.SecurityContextHolder;
 import org.apache.maven.continuum.Continuum;
 import org.apache.maven.continuum.ContinuumException;
 import org.apache.maven.continuum.configuration.ConfigurationService;
@@ -49,6 +54,8 @@
 
     private Continuum continuum;
 
+    private BasicAclExtendedDao aclDao;
+
     /**
      * Set the object to delegate to
      * 
@@ -69,6 +76,81 @@
         return continuum;
     }
 
+    public void setAclDao( BasicAclExtendedDao aclDao )
+    {
+        this.aclDao = aclDao;
+    }
+
+    public BasicAclExtendedDao getAclDao()
+    {
+        return aclDao;
+    }
+
+    /**
+     * Project has same permissions as its project group.
+     * 
+     * @param project
+     * @return
+     */
+    private SimpleAclEntry getProjectAcl( Project project )
+    {
+        NamedEntityObjectIdentity projectGroupIdentity = new NamedEntityObjectIdentity( ProjectGroup.class.getName(),
+                                                                                        Integer.toString( project
+                                                                                            .getProjectGroup().getId() ) );
+        SimpleAclEntry aclEntry = new SimpleAclEntry();
+        //        aclEntry.setAclObjectIdentity( new NamedEntityObjectIdentity( Project.class.getName(), Integer
+        //            .toString( project.getId() ) ) );
+        aclEntry.setAclObjectParentIdentity( projectGroupIdentity );
+        return aclEntry;
+    }
+
+    /**
+     * Creator of {@link ProjectGroup} has {@link SimpleAclEntry#ADMINISTRATION} permissions.
+     * 
+     * @param projectGroup
+     * @return an ACL entry for the creator of the group
+     */
+    private SimpleAclEntry getProjectGroupAcl( ProjectGroup projectGroup )
+    {
+        Object username = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
+        SimpleAclEntry aclEntry = new SimpleAclEntry();
+        aclEntry.setAclObjectIdentity( new NamedEntityObjectIdentity( ProjectGroup.class.getName(), Integer
+            .toString( projectGroup.getId() ) ) );
+        aclEntry.setRecipient( username );
+        aclEntry.addPermission( SimpleAclEntry.ADMINISTRATION );
+        return aclEntry;
+    }
+
+    /**
+     * Call this method when new {@link ProjectGroup}s are created.
+     * 
+     * @param projectGroups
+     */
+    private void createNewProjectGroupsACLs( Collection projectGroups )
+    {
+        Iterator it = projectGroups.iterator();
+        while ( it.hasNext() )
+        {
+            ProjectGroup projectGroup = (ProjectGroup) it.next();
+            getAclDao().create( getProjectGroupAcl( projectGroup ) );
+        }
+    }
+
+    /**
+     * Call this method when new {@link Project}s are created.
+     * 
+     * @param projects
+     */
+    private void createNewProjectsACLs( Collection projects )
+    {
+        Iterator it = projects.iterator();
+        while ( it.hasNext() )
+        {
+            Project project = (Project) it.next();
+            getAclDao().create( getProjectAcl( project ) );
+        }
+    }
+
     /**
      * @param projectId
      * @param buildDefinition
@@ -102,7 +184,10 @@
     public ContinuumProjectBuildingResult addMavenOneProject( String metadataUrl )
         throws ContinuumException
     {
-        return getContinuum().addMavenOneProject( metadataUrl );
+        ContinuumProjectBuildingResult result = getContinuum().addMavenOneProject( metadataUrl );
+        createNewProjectGroupsACLs( result.getProjectGroups() );
+        createNewProjectsACLs( result.getProjects() );
+        return result;
     }
 
     /**
@@ -114,7 +199,10 @@
     public ContinuumProjectBuildingResult addMavenTwoProject( String metadataUrl )
         throws ContinuumException
     {
-        return getContinuum().addMavenTwoProject( metadataUrl );
+        ContinuumProjectBuildingResult result = getContinuum().addMavenTwoProject( metadataUrl );
+        createNewProjectGroupsACLs( result.getProjectGroups() );
+        createNewProjectsACLs( result.getProjects() );
+        return result;
     }
 
     /**

Modified: maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=440233&r1=440232&r2=440233
==============================================================================
--- maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/resources/META-INF/plexus/components.xml (original)
+++ maven/continuum/branches/continuum-acegi/continuum-security/continuum-security-acegi/src/main/resources/META-INF/plexus/components.xml Mon Sep  4 20:17:37 2006
@@ -11,6 +11,10 @@
           <role-hint>default</role-hint>
           <field-name>continuum</field-name>
         </requirement>
+        <requirement>
+          <role>org.acegisecurity.acl.basic.BasicAclExtendedDao</role>
+          <field-name>aclDao</field-name>
+        </requirement>
       </requirements>
     </component>