Modified: 
maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java
 (original)
+++ 
maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/constraints/UniqueVersionConstraintTest.java
 Tue Nov  6 10:26:04 2007
@@ -26,9 +26,9 @@
 import org.apache.maven.archiva.database.SimpleConstraint;
 import org.apache.maven.archiva.model.ArchivaArtifact;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -42,87 +42,152 @@
 {
     private ArtifactDAO artifactDao;
 
-    protected void setUp()
+    public void testConstraintGroupIdArtifactIdCommonsLang()
         throws Exception
     {
-        super.setUp();
+        setupArtifacts();
 
-        ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" );
-        artifactDao = dao.getArtifactDAO();
+        assertConstraint( new String[] { "2.0", "2.1" }, new 
UniqueVersionConstraint( "commons-lang", "commons-lang" ) );
+    }
+
+    public void testConstraintGroupIdArtifactIdInvalid()
+        throws Exception
+    {
+        setupArtifacts();
+
+        assertConstraint( new String[] {}, new UniqueVersionConstraint( 
"org.apache", "invalid" ) );
+        assertConstraint( new String[] {}, new UniqueVersionConstraint( 
"org.apache.test", "invalid" ) );
+        assertConstraint( new String[] {}, new UniqueVersionConstraint( 
"invalid", "test-two" ) );
+    }
+
+    public void testConstraintGroupIdArtifactIdMavenSharedTestTwo()
+        throws Exception
+    {
+        setupArtifacts();
+
+        assertConstraint( new String[] { "2.0", "2.1-SNAPSHOT", "2.1.1", 
"2.1-alpha-1" },
+                          new UniqueVersionConstraint( 
"org.apache.maven.shared", "test-two" ) );
+    }
+
+    public void testConstraintGroupIdArtifactIdMavenSharedTestTwoCentralOnly()
+        throws Exception
+    {
+        setupArtifacts();
+
+        List<String> observableRepositories = new ArrayList<String>();
+        observableRepositories.add( "central" );
+
+        assertConstraint( new String[] { "2.0", "2.1.1", "2.1-alpha-1" },
+                          new UniqueVersionConstraint( observableRepositories, 
"org.apache.maven.shared", "test-two" ) );
+    }
+
+    public void 
testConstraintGroupIdArtifactIdMavenSharedTestTwoSnapshotsOnly()
+        throws Exception
+    {
+        setupArtifacts();
+
+        List<String> observableRepositories = new ArrayList<String>();
+        observableRepositories.add( "snapshots" );
+
+        assertConstraint( new String[] { "2.1-SNAPSHOT" }, 
+                          new UniqueVersionConstraint( observableRepositories, 
"org.apache.maven.shared", "test-two" ) );
+    }
+
+    public void testConstraintGroupIdArtifactIdMavenTestOne()
+        throws Exception
+    {
+        setupArtifacts();
+
+        assertConstraint( new String[] { "1.2" }, new UniqueVersionConstraint( 
"org.apache.maven.test", "test-one" ) );
     }
 
-    public ArchivaArtifact createArtifact( String groupId, String artifactId, 
String version )
+    public void testConstraintGroupIdArtifactIdModelloLong()
+        throws Exception
+    {
+        setupArtifacts();
+
+        assertConstraint( new String[] { "3.0" }, new UniqueVersionConstraint( 
"org.codehaus.modello", "modellong" ) );
+    }
+
+    private void assertConstraint( String[] versions, SimpleConstraint 
constraint )
+    {
+        String prefix = "Unique Versions: ";
+
+        List<String> results = dao.query( constraint );
+        assertNotNull( prefix + "Not Null", results );
+        assertEquals( prefix + "Results.size", versions.length, results.size() 
);
+
+        List<String> expectedVersions = Arrays.asList( versions );
+
+        for ( String actualVersion : results )
+        {
+            assertTrue( prefix + "version result should not be blank.", 
StringUtils.isNotBlank( actualVersion ) );
+            assertTrue( prefix + "version result <" + actualVersion + "> 
exists in expected versions.",
+                        expectedVersions.contains( actualVersion ) );
+        }
+    }
+
+    private ArchivaArtifact createArtifact( String repoId, String groupId, 
String artifactId, String version )
     {
         ArchivaArtifact artifact = artifactDao.createArtifact( groupId, 
artifactId, version, "", "jar" );
         artifact.getModel().setLastModified( new Date() ); // mandatory field.
-        artifact.getModel().setRepositoryId( "testable_repo" );
+        artifact.getModel().setRepositoryId( repoId );
         return artifact;
     }
 
-    public void testConstraint()
+    private void setupArtifacts()
         throws Exception
     {
         ArchivaArtifact artifact;
 
         // Setup artifacts in fresh DB.
-        artifact = createArtifact( "commons-lang", "commons-lang", "2.0" );
+        artifact = createArtifact( "central", "commons-lang", "commons-lang", 
"2.0" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "commons-lang", "commons-lang", "2.1" );
+        artifact = createArtifact( "central", "commons-lang", "commons-lang", 
"2.1" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.apache.maven.test", "test-one", "1.2" 
);
+        artifact = createArtifact( "central", "org.apache.maven.test", 
"test-one", "1.2" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.apache.maven.test.foo", "test-two", 
"1.0" );
+        artifact = createArtifact( "central", "org.apache.maven.test.foo", 
"test-two", "1.0" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.apache.maven.shared", "test-two", 
"2.0" );
+        artifact = createArtifact( "central", "org.apache.maven.shared", 
"test-two", "2.0" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.apache.maven.shared", "test-two", 
"2.1-SNAPSHOT" );
+        artifact = createArtifact( "central", "org.apache.maven.shared", 
"test-two", "2.1.1" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.apache.maven.shared", "test-two", 
"2.1.1" );
+        artifact = createArtifact( "central", "org.apache.maven.shared", 
"test-two", "2.1-alpha-1" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.apache.maven.shared", "test-two", 
"2.1-alpha-1" );
+        artifact = createArtifact( "central", "org.apache.maven.shared", 
"test-bar", "2.1" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.apache.maven.shared", "test-bar", 
"2.1" );
+        artifact = createArtifact( "central", "org.codehaus.modello", 
"modellong", "3.0" );
         artifactDao.saveArtifact( artifact );
 
-        artifact = createArtifact( "org.codehaus.modello", "modellong", "3.0" 
);
+        // Snapshots repository artifacts
+        artifact = createArtifact( "snapshots", "org.apache.maven.shared", 
"test-two", "2.1-SNAPSHOT" );
         artifactDao.saveArtifact( artifact );
 
-        assertConstraint( new String[] {}, new UniqueVersionConstraint( 
"org.apache", "invalid" ) );
-        assertConstraint( new String[] {}, new UniqueVersionConstraint( 
"org.apache.test", "invalid" ) );
-        assertConstraint( new String[] {}, new UniqueVersionConstraint( 
"invalid", "test-two" ) );
+        artifact = createArtifact( "snapshots", "org.codehaus.modello", 
"test-three", "1.0-SNAPSHOT" );
+        artifactDao.saveArtifact( artifact );
 
-        assertConstraint( new String[] { "2.0", "2.1" }, new 
UniqueVersionConstraint( "commons-lang", "commons-lang" ) );
-        assertConstraint( new String[] { "1.2" }, new UniqueVersionConstraint( 
"org.apache.maven.test", "test-one" ) );
-        assertConstraint( new String[] { "2.0", "2.1-SNAPSHOT", "2.1.1", 
"2.1-alpha-1" },
-                          new UniqueVersionConstraint( 
"org.apache.maven.shared", "test-two" ) );
-        assertConstraint( new String[] { "3.0" }, new UniqueVersionConstraint( 
"org.codehaus.modello", "modellong" ) );
+        artifact = createArtifact( "snapshots", "org.codehaus.mojo", 
"testable-maven-plugin", "2.1-SNAPSHOT" );
+        artifactDao.saveArtifact( artifact );
+
+        artifact = createArtifact( "snapshots", "org.apache.archiva", 
"testable", "1.1-alpha-1-20070822.033400-43" );
+        artifactDao.saveArtifact( artifact );
     }
 
-    private void assertConstraint( String[] versions, SimpleConstraint 
constraint )
+    protected void setUp()
+        throws Exception
     {
-        String prefix = "Unique Versions: ";
-
-        List results = dao.query( constraint );
-        assertNotNull( prefix + "Not Null", results );
-        assertEquals( prefix + "Results.size", versions.length, results.size() 
);
-
-        List expectedVersions = Arrays.asList( versions );
+        super.setUp();
 
-        Iterator it = results.iterator();
-        while ( it.hasNext() )
-        {
-            String actualVersion = (String) it.next();
-            assertTrue( prefix + "version result should not be blank.", 
StringUtils.isNotBlank( actualVersion ) );
-            assertTrue( prefix + "version result <" + actualVersion + "> 
exists in expected versions.",
-                        expectedVersions.contains( actualVersion ) );
-        }
+        ArchivaDAO dao = (ArchivaDAO) lookup( ArchivaDAO.ROLE, "jdo" );
+        artifactDao = dao.getArtifactDAO();
     }
 }

Modified: maven/archiva/trunk/archiva-web/archiva-security/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-security/pom.xml?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-security/pom.xml (original)
+++ maven/archiva/trunk/archiva-web/archiva-security/pom.xml Tue Nov  6 
10:26:04 2007
@@ -29,22 +29,40 @@
   <name>Archiva Web :: Security Configuration</name>
   <dependencies>
     <dependency>
+      <groupId>org.apache.maven.archiva</groupId>
+      <artifactId>archiva-configuration</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus.redback</groupId>
+      <artifactId>redback-system</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus.redback</groupId>
+      <artifactId>redback-rbac-model</artifactId>
+    </dependency>
+    <dependency>
       <groupId>org.codehaus.plexus.redback</groupId>
       <artifactId>redback-rbac-role-manager</artifactId>
     </dependency>
+    <!-- Test Scoped -->
     <dependency>
       <groupId>org.codehaus.plexus.redback</groupId>
-      <artifactId>redback-rbac-memory</artifactId>
+      <artifactId>redback-authorization-rbac</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.codehaus.plexus.redback</groupId>
-      <artifactId>redback-xwork-integration</artifactId>
+      <artifactId>redback-keys-memory</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.derby</groupId>
-      <artifactId>derby</artifactId>
+      <groupId>org.codehaus.plexus.redback</groupId>
+      <artifactId>redback-users-memory</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus.redback</groupId>
+      <artifactId>redback-rbac-memory</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>

Modified: 
maven/archiva/trunk/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-security/src/main/java/org/apache/maven/archiva/security/ArchivaRoleConstants.java
 Tue Nov  6 10:26:04 2007
@@ -35,6 +35,10 @@
     public static final String REGISTERED_USER_ROLE = "Registered User";
 
     public static final String GUEST_ROLE = "Guest";
+    
+    // principals
+    
+    public static final String PRINCIPAL_GUEST = "guest";
 
     // dynamic role prefixes
     public static final String REPOSITORY_MANAGER_ROLE_PREFIX = "Repository 
Manager";
@@ -68,4 +72,15 @@
     public static final String TEMPLATE_REPOSITORY_MANAGER = 
"archiva-repository-manager";
     
     public static final String TEMPLATE_REPOSITORY_OBSERVER = 
"archiva-repository-observer";
+    
+    public static final String TEMPLATE_GLOBAL_REPOSITORY_OBSERVER = 
"archiva-global-repository-observer"; 
+    
+    public static final String TEMPLATE_SYSTEM_ADMIN = 
"archiva-system-administrator";
+    
+    public static final String TEMPLATE_GUEST = "archiva-guest";
+    
+    public static String toRepositoryObserverRoleName( String repoId )
+    {
+        return REPOSITORY_OBSERVER_ROLE_PREFIX + " - " + repoId;
+    }
 }

Modified: 
maven/archiva/trunk/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/RoleManagerTest.xml
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/RoleManagerTest.xml?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/RoleManagerTest.xml
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-security/src/test/resources/org/apache/maven/archiva/security/RoleManagerTest.xml
 Tue Nov  6 10:26:04 2007
@@ -34,7 +34,7 @@
         </requirement>
       </requirements>
     </component>
-   <component>
+    <component>
       
<role>org.codehaus.plexus.redback.role.processor.RoleModelProcessor</role>
       <role-hint>default</role-hint>
       
<implementation>org.codehaus.plexus.redback.role.processor.DefaultRoleModelProcessor</implementation>
@@ -47,6 +47,7 @@
         </requirement>
       </requirements>
     </component>
+    
     <component>
       
<role>org.codehaus.plexus.redback.role.template.RoleTemplateProcessor</role>
       <role-hint>default</role-hint>
@@ -60,5 +61,45 @@
         </requirement>
       </requirements>
     </component>
+        <component>
+      <role>org.codehaus.plexus.redback.system.check.EnvironmentCheck</role>
+      <role-hint>required-roles</role-hint>
+      
<implementation>org.apache.maven.archiva.security.ArchivaStandardRolesCheck</implementation>
+      <description>ArchivaStandardRolesCheck tests for the existance of 
expected / standard roles and permissions.</description>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.redback.rbac.RBACManager</role>
+          <role-hint>memory</role-hint>
+          <field-name>rbacManager</field-name>
+        </requirement>
+      </requirements>
+    </component>
+  
+    <component>
+      <role>org.apache.maven.archiva.security.SecurityStartup</role>
+      
<implementation>org.apache.maven.archiva.security.SecurityStartup</implementation>
+      <description>SecurityStartup</description>
+      <requirements>
+        <requirement>
+          <role>org.codehaus.plexus.redback.role.RoleManager</role>
+          <role-hint>default</role-hint>
+          <field-name>roleManager</field-name>
+        </requirement>
+        <requirement>
+          <role>org.codehaus.plexus.redback.rbac.RBACManager</role>
+          <role-hint>memory</role-hint>
+          <field-name>rbacManager</field-name>
+        </requirement>
+        <requirement>
+          
<role>org.codehaus.plexus.redback.system.check.EnvironmentCheck</role>
+          <field-name>checkers</field-name>
+        </requirement>
+        <requirement>
+          
<role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+          <field-name>archivaConfiguration</field-name>
+        </requirement>
+      </requirements>
+    </component>
+    
   </components>
 </component-set>

Modified: 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
 Tue Nov  6 10:26:04 2007
@@ -19,11 +19,20 @@
  * under the License.
  */
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.database.browsing.BrowsingResults;
 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
+import org.apache.maven.archiva.security.AccessDeniedException;
+import org.apache.maven.archiva.security.ArchivaSecurityException;
+import org.apache.maven.archiva.security.ArchivaUser;
+import org.apache.maven.archiva.security.PrincipalNotFoundException;
+import org.apache.maven.archiva.security.UserRepositories;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
+import java.util.Collections;
+import java.util.List;
+
 /**
  * Browse the repository.
  *
@@ -39,6 +48,16 @@
      * @plexus.requirement role-hint="default"
      */
     private RepositoryBrowsing repoBrowsing;
+    
+    /**
+     * @plexus.requirement
+     */
+    private UserRepositories userRepositories;
+    
+    /**
+     * @plexus.requirement role-hint="xwork"
+     */
+    private ArchivaUser archivaUser;
 
     private BrowsingResults results;
 
@@ -48,7 +67,13 @@
 
     public String browse()
     {
-        this.results = repoBrowsing.getRoot();
+        List<String> selectedRepos = getObservableRepos();
+        if ( CollectionUtils.isEmpty( selectedRepos ) )
+        {
+            return GlobalResults.ACCESS_TO_NO_REPOS;
+        }
+
+        this.results = repoBrowsing.getRoot( getPrincipal(), selectedRepos );
         return SUCCESS;
     }
 
@@ -61,7 +86,14 @@
             return ERROR;
         }
 
-        this.results = repoBrowsing.selectGroupId( groupId );
+        List<String> selectedRepos = getObservableRepos();
+        if ( CollectionUtils.isEmpty( selectedRepos ) )
+        {
+            return GlobalResults.ACCESS_TO_NO_REPOS;
+        }
+
+        
+        this.results = repoBrowsing.selectGroupId( getPrincipal(), 
selectedRepos, groupId );
         return SUCCESS;
     }
 
@@ -81,8 +113,42 @@
             return ERROR;
         }
 
-        this.results = repoBrowsing.selectArtifactId( groupId, artifactId );
+        List<String> selectedRepos = getObservableRepos();
+        if ( CollectionUtils.isEmpty( selectedRepos ) )
+        {
+            return GlobalResults.ACCESS_TO_NO_REPOS;
+        }
+
+        
+        this.results = repoBrowsing.selectArtifactId( getPrincipal(), 
selectedRepos, groupId, artifactId );
         return SUCCESS;
+    }
+    
+    private String getPrincipal()
+    {
+        return archivaUser.getActivePrincipal();
+    }
+    
+    private List<String> getObservableRepos()
+    {
+        try
+        {
+            return userRepositories.getObservableRepositoryIds( getPrincipal() 
);
+        }
+        catch ( PrincipalNotFoundException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        catch ( AccessDeniedException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+            // TODO: pass this onto the screen.
+        }
+        catch ( ArchivaSecurityException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        return Collections.emptyList();
     }
 
     public String getGroupId()

Modified: 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/SearchAction.java
 Tue Nov  6 10:26:04 2007
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.database.ArchivaDAO;
 import org.apache.maven.archiva.database.Constraint;
@@ -28,9 +29,15 @@
 import org.apache.maven.archiva.indexer.search.CrossRepositorySearch;
 import org.apache.maven.archiva.indexer.search.SearchResultLimits;
 import org.apache.maven.archiva.indexer.search.SearchResults;
+import org.apache.maven.archiva.security.AccessDeniedException;
+import org.apache.maven.archiva.security.ArchivaSecurityException;
+import org.apache.maven.archiva.security.ArchivaUser;
+import org.apache.maven.archiva.security.PrincipalNotFoundException;
+import org.apache.maven.archiva.security.UserRepositories;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
 import java.net.MalformedURLException;
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -60,6 +67,16 @@
      * @plexus.requirement role-hint="default"
      */
     private CrossRepositorySearch crossRepoSearch;
+    
+    /**
+     * @plexus.requirement
+     */
+    private UserRepositories userRepositories;
+    
+    /**
+     * @plexus.requirement role-hint="xwork"
+     */
+    private ArchivaUser archivaUser;
 
     private static final String RESULTS = "results";
 
@@ -79,8 +96,14 @@
         assert q != null && q.length() != 0;
 
         SearchResultLimits limits = new SearchResultLimits( 0 );
+        
+        List<String> selectedRepos = getObservableRepos();
+        if ( CollectionUtils.isEmpty( selectedRepos ) )
+        {
+            return GlobalResults.ACCESS_TO_NO_REPOS;
+        }
 
-        results = crossRepoSearch.searchForTerm( q, limits );
+        results = crossRepoSearch.searchForTerm( getPrincipal(), 
selectedRepos, q, limits );
 
         if ( results.isEmpty() )
         {
@@ -125,15 +148,41 @@
             // 1 hit? return it's information directly!            
             return ARTIFACT;
         }
-        else
-        {
-            return RESULTS;
-        }
+        
+        return RESULTS;
     }
 
+    @Override
     public String doInput()
     {
         return INPUT;
+    }
+    
+    private String getPrincipal()
+    {
+        return archivaUser.getActivePrincipal();
+    }
+    
+    private List<String> getObservableRepos()
+    {
+        try
+        {
+            return userRepositories.getObservableRepositoryIds( getPrincipal() 
);
+        }
+        catch ( PrincipalNotFoundException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        catch ( AccessDeniedException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+            // TODO: pass this onto the screen.
+        }
+        catch ( ArchivaSecurityException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        return Collections.emptyList();
     }
 
     public String getQ()

Modified: 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
 Tue Nov  6 10:26:04 2007
@@ -26,8 +26,14 @@
 import org.apache.maven.archiva.database.ObjectNotFoundException;
 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
 import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.security.AccessDeniedException;
+import org.apache.maven.archiva.security.ArchivaSecurityException;
+import org.apache.maven.archiva.security.ArchivaUser;
+import org.apache.maven.archiva.security.PrincipalNotFoundException;
+import org.apache.maven.archiva.security.UserRepositories;
 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
 
+import java.util.Collections;
 import java.util.List;
 
 /**
@@ -46,6 +52,16 @@
      * @plexus.requirement role-hint="default"
      */
     private RepositoryBrowsing repoBrowsing;
+    
+    /**
+     * @plexus.requirement
+     */
+    private UserRepositories userRepositories;
+    
+    /**
+     * @plexus.requirement role-hint="xwork"
+     */
+    private ArchivaUser archivaUser;
 
     /* .\ Input Parameters \.________________________________________ */
 
@@ -86,7 +102,7 @@
     {
         try
         {
-            this.model = repoBrowsing.selectVersion( groupId, artifactId, 
version );
+            this.model = repoBrowsing.selectVersion( getPrincipal(), 
getObservableRepos(), groupId, artifactId, version );
         }
         catch ( ObjectNotFoundException oe )
         {
@@ -104,7 +120,7 @@
     public String dependencies()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        this.model = repoBrowsing.selectVersion( groupId, artifactId, version 
);
+        this.model = repoBrowsing.selectVersion( getPrincipal(), 
getObservableRepos(), groupId, artifactId, version );
 
         this.dependencies = model.getDependencies();
 
@@ -117,7 +133,7 @@
     public String mailingLists()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        this.model = repoBrowsing.selectVersion( groupId, artifactId, version 
);
+        this.model = repoBrowsing.selectVersion( getPrincipal(), 
getObservableRepos(), groupId, artifactId, version );
         this.mailingLists = model.getMailingLists();
 
         return SUCCESS;
@@ -142,9 +158,9 @@
     public String dependees()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        this.model = repoBrowsing.selectVersion( groupId, artifactId, version 
);
+        this.model = repoBrowsing.selectVersion( getPrincipal(), 
getObservableRepos(), groupId, artifactId, version );
 
-        this.dependees = repoBrowsing.getUsedBy( groupId, artifactId, version 
);
+        this.dependees = repoBrowsing.getUsedBy( getPrincipal(), 
getObservableRepos(), groupId, artifactId, version );
 
         return SUCCESS;
     }
@@ -155,9 +171,36 @@
     public String dependencyTree()
         throws ObjectNotFoundException, ArchivaDatabaseException
     {
-        this.model = repoBrowsing.selectVersion( groupId, artifactId, version 
);
+        this.model = repoBrowsing.selectVersion( getPrincipal(), 
getObservableRepos(), groupId, artifactId, version );
 
         return SUCCESS;
+    }
+    
+    private String getPrincipal()
+    {
+        return archivaUser.getActivePrincipal();
+    }
+    
+    private List<String> getObservableRepos()
+    {
+        try
+        {
+            return userRepositories.getObservableRepositoryIds( getPrincipal() 
);
+        }
+        catch ( PrincipalNotFoundException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        catch ( AccessDeniedException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+            // TODO: pass this onto the screen.
+        }
+        catch ( ArchivaSecurityException e )
+        {
+            getLogger().warn( e.getMessage(), e );
+        }
+        return Collections.emptyList();
     }
 
     public void validate()

Modified: 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java
 (original)
+++ 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/startup/SecuritySynchronization.java
 Tue Nov  6 10:26:04 2007
@@ -193,14 +193,13 @@
                     ua = rbacManager.createUserAssignment( principal );
                 }
 
-                ua.addRoleName( 
ArchivaRoleConstants.REPOSITORY_OBSERVER_ROLE_PREFIX + " - " + repoId );
+                ua.addRoleName( 
ArchivaRoleConstants.toRepositoryObserverRoleName( repoId ) );
                 rbacManager.saveUserAssignment( ua );
             }
             catch ( RbacManagerException e )
             {
-                getLogger().warn(
-                                  "Unable to add role [" + 
ArchivaRoleConstants.REPOSITORY_OBSERVER_ROLE_PREFIX + " - "
-                                      + repoId + "] to " + principal + " 
user.", e );
+                getLogger().warn( "Unable to add role [" + 
ArchivaRoleConstants.toRepositoryObserverRoleName( repoId )
+                                      + "] to " + principal + " user.", e );
             }
         }
     }

Modified: 
maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml 
(original)
+++ maven/archiva/trunk/archiva-web/archiva-webapp/src/main/resources/xwork.xml 
Tue Nov  6 10:26:04 2007
@@ -82,6 +82,7 @@
 
     <global-results>
       <!-- The following security-* result names arrive from the 
plexus-security package -->
+      
       <result name="security-login-success" 
type="redirect-action">index</result>
       <result name="security-login-cancel" 
type="redirect-action">index</result>
       <result name="security-login-locked" type="redirect-action">
@@ -126,6 +127,7 @@
       <!-- Generic Catchall for those action configurations that forget to
            include a result for 'error' -->
       <result name="error">/WEB-INF/jsp/generalError.jsp</result>
+      <result 
name="access_to_no_repos">/WEB-INF/jsp/accessToNoRepos.jsp</result>
     </global-results>
   </package>
 

Modified: maven/archiva/trunk/pom.xml
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/pom.xml?rev=592513&r1=592512&r2=592513&view=diff
==============================================================================
--- maven/archiva/trunk/pom.xml (original)
+++ maven/archiva/trunk/pom.xml Tue Nov  6 10:26:04 2007
@@ -579,6 +579,29 @@
         <groupId>org.codehaus.plexus.redback</groupId>
         <artifactId>redback-rbac-memory</artifactId>
         <version>${redback.version}</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus.redback</groupId>
+        <artifactId>redback-users-memory</artifactId>
+        <version>${redback.version}</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus.redback</groupId>
+        <artifactId>redback-keys-memory</artifactId>
+        <version>${redback.version}</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus.redback</groupId>
+        <artifactId>redback-rbac-model</artifactId>
+        <version>${redback.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus.redback</groupId>
+        <artifactId>redback-authorization-rbac</artifactId>
+        <version>${redback.version}</version>
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus.redback</groupId>
@@ -587,6 +610,11 @@
       </dependency>
       <dependency>
         <groupId>org.codehaus.plexus.redback</groupId>
+        <artifactId>redback-system</artifactId>
+        <version>${redback.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.codehaus.plexus.redback</groupId>
         <artifactId>redback-taglib</artifactId>
         <version>${redback.version}</version>
       </dependency>
@@ -862,13 +890,16 @@
   <properties>
     <maven.version>2.0.5</maven.version>
     <wagon.version>1.0-beta-2</wagon.version>
-    <redback.version>1.0-alpha-3</redback.version>
+    <redback.version>1.0-alpha-4</redback.version>
   </properties>
   <!-- for plexus webdav snapshot -->
   <repositories>
     <repository>
       <id>codehaus.snapshots</id>
       <url>http://snapshots.repository.codehaus.org/</url>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
     </repository>
   </repositories>
 </project>


Reply via email to