You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ol...@apache.org on 2013/02/21 15:36:06 UTC
svn commit: r1448652 - in /archiva/trunk/archiva-modules/archiva-web:
archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/
archiva-web-common/src/main/java/org/apache/archiva/web/security/
Author: olamy
Date: Thu Feb 21 14:36:05 2013
New Revision: 1448652
URL: http://svn.apache.org/r1448652
Log:
really chain of rbac manager
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRedbackRuntimeConfigurationService.java
archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaRbacManager.java
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRedbackRuntimeConfigurationService.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRedbackRuntimeConfigurationService.java?rev=1448652&r1=1448651&r2=1448652&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRedbackRuntimeConfigurationService.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRedbackRuntimeConfigurationService.java Thu Feb 21 14:36:05 2013
@@ -33,6 +33,7 @@ import org.apache.archiva.redback.compon
import org.apache.archiva.redback.policy.CookieSettings;
import org.apache.archiva.redback.policy.PasswordRule;
import org.apache.archiva.redback.rbac.RBACManager;
+import org.apache.archiva.redback.role.RoleManager;
import org.apache.archiva.redback.users.UserManager;
import org.apache.archiva.rest.api.model.RBACManagerImplementationInformation;
import org.apache.archiva.rest.api.model.RedbackImplementationsInformations;
@@ -75,6 +76,9 @@ public class DefaultRedbackRuntimeConfig
private RBACManager rbacManager;
@Inject
+ private RoleManager roleManager;
+
+ @Inject
private ApplicationContext applicationContext;
@Inject
@@ -136,6 +140,7 @@ public class DefaultRedbackRuntimeConfig
log.info( "rbac manager changed to {}Â so reload it",
redbackRuntimeConfiguration.getRbacManagerImpls() );
rbacManager.initialize();
+ roleManager.initialize();
}
ldapConnectionFactory.initialize();
Modified: archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaRbacManager.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaRbacManager.java?rev=1448652&r1=1448651&r2=1448652&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaRbacManager.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/security/ArchivaRbacManager.java Thu Feb 21 14:36:05 2013
@@ -35,7 +35,9 @@ import org.springframework.context.Appli
import org.springframework.stereotype.Service;
import javax.inject.Inject;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -105,41 +107,130 @@ public class ArchivaRbacManager
public Role saveRole( Role role )
throws RbacObjectInvalidException, RbacManagerException
{
- return getRbacManagerForWrite().saveRole( role );
+ Exception lastException = null;
+ boolean allFailed = true;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ role = rbacManager.saveRole( role );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return role;
}
public void saveRoles( Collection<Role> roles )
throws RbacObjectInvalidException, RbacManagerException
{
- getRbacManagerForWrite().saveRoles( roles );
+ Exception lastException = null;
+ boolean allFailed = true;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ rbacManager.saveRoles( roles );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
}
public Role getRole( String roleName )
throws RbacObjectNotFoundException, RbacManagerException
{
+ Exception lastException = null;
for ( RBACManager rbacManager : rbacManagersPerId.values() )
{
- Role role = rbacManager.getRole( roleName );
- if ( role != null )
+ try
+ {
+ Role role = rbacManager.getRole( roleName );
+ if ( role != null )
+ {
+ return role;
+ }
+ }
+ catch ( Exception e )
{
- return role;
+ lastException = e;
}
}
log.debug( "cannot find role for name: â{}", roleName );
+ if ( lastException != null )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
return null;
}
public List<Role> getAllRoles()
throws RbacManagerException
{
- // iterate and aggregate results ?
- return getRbacManagerForWrite().getAllRoles();
+ Map<String, Role> allRoles = new HashMap<String, Role>();
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ List<Role> roles = rbacManager.getAllRoles();
+ for ( Role role : roles )
+ {
+ allRoles.put( role.getName(), role );
+ }
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+
+ return new ArrayList<Role>( allRoles.values() );
}
public void removeRole( Role role )
throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
{
- getRbacManagerForWrite().removeRole( role );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ rbacManager.removeRole( role );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
}
public Permission createPermission( String name )
@@ -157,25 +248,108 @@ public class ArchivaRbacManager
public Permission savePermission( Permission permission )
throws RbacObjectInvalidException, RbacManagerException
{
- return getRbacManagerForWrite().savePermission( permission );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ permission = rbacManager.savePermission( permission );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+
+ return permission;
}
public Permission getPermission( String permissionName )
throws RbacObjectNotFoundException, RbacManagerException
{
- return getRbacManagerForWrite().getPermission( permissionName );
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ Permission p = rbacManager.getPermission( permissionName );
+ if ( p != null )
+ {
+ return p;
+ }
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return null;
}
public List<Permission> getAllPermissions()
throws RbacManagerException
{
- return getRbacManagerForWrite().getAllPermissions();
+ Map<String, Permission> allPermissions = new HashMap<String, Permission>();
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ List<Permission> permissions = rbacManager.getAllPermissions();
+ for ( Permission p : permissions )
+ {
+ allPermissions.put( p.getName(), p );
+ }
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return new ArrayList<Permission>( allPermissions.values() );
}
public void removePermission( Permission permission )
throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
{
- getRbacManagerForWrite().removePermission( permission );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ rbacManager.removePermission( permission );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
}
public Operation createOperation( String name )
@@ -187,25 +361,107 @@ public class ArchivaRbacManager
public Operation saveOperation( Operation operation )
throws RbacObjectInvalidException, RbacManagerException
{
- return getRbacManagerForWrite().saveOperation( operation );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ operation = rbacManager.saveOperation( operation );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return operation;
}
public Operation getOperation( String operationName )
throws RbacObjectNotFoundException, RbacManagerException
{
- return getRbacManagerForWrite().getOperation( operationName );
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ Operation o = rbacManager.getOperation( operationName );
+ if ( o != null )
+ {
+ return o;
+ }
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return null;
}
public List<Operation> getAllOperations()
throws RbacManagerException
{
- return getRbacManagerForWrite().getAllOperations();
+ Map<String, Operation> allOperations = new HashMap<String, Operation>();
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ List<Operation> operations = rbacManager.getAllOperations();
+ for ( Operation o : operations )
+ {
+ allOperations.put( o.getName(), o );
+ }
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return new ArrayList<Operation>( allOperations.values() );
}
public void removeOperation( Operation operation )
throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
{
- getRbacManagerForWrite().removeOperation( operation );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ rbacManager.removeOperation( operation );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
}
public Resource createResource( String identifier )
@@ -217,25 +473,109 @@ public class ArchivaRbacManager
public Resource saveResource( Resource resource )
throws RbacObjectInvalidException, RbacManagerException
{
- return getRbacManagerForWrite().saveResource( resource );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ resource = rbacManager.saveResource( resource );
+
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return resource;
}
public Resource getResource( String resourceIdentifier )
throws RbacObjectNotFoundException, RbacManagerException
{
- return getRbacManagerForWrite().getResource( resourceIdentifier );
+
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ Resource r = rbacManager.getResource( resourceIdentifier );
+ if ( r != null )
+ {
+ return r;
+ }
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return null;
}
public List<Resource> getAllResources()
throws RbacManagerException
{
- return getRbacManagerForWrite().getAllResources();
+ Map<String, Resource> allResources = new HashMap<String, Resource>();
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ List<Resource> resources = rbacManager.getAllResources();
+ for ( Resource r : resources )
+ {
+ allResources.put( r.getIdentifier(), r );
+ }
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return new ArrayList<Resource>( allResources.values() );
}
public void removeResource( Resource resource )
throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
{
- getRbacManagerForWrite().removeResource( resource );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ rbacManager.removeResource( resource );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
}
public UserAssignment createUserAssignment( String principal )
@@ -247,61 +587,211 @@ public class ArchivaRbacManager
public UserAssignment saveUserAssignment( UserAssignment userAssignment )
throws RbacObjectInvalidException, RbacManagerException
{
- return getRbacManagerForWrite().saveUserAssignment( userAssignment );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ userAssignment = rbacManager.saveUserAssignment( userAssignment );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return userAssignment;
}
public UserAssignment getUserAssignment( String principal )
throws RbacObjectNotFoundException, RbacManagerException
{
- return getRbacManagerForWrite().getUserAssignment( principal );
+
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ UserAssignment ua = rbacManager.getUserAssignment( principal );
+ if ( ua != null )
+ {
+ return ua;
+ }
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return null;
}
@Override
public boolean userAssignmentExists( String principal )
{
- return getRbacManagerForWrite().userAssignmentExists( principal );
+
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ boolean exists = rbacManager.userAssignmentExists( principal );
+ if ( exists )
+ {
+ return true;
+ }
+ }
+ catch ( Exception e )
+ {
+ // no op
+ }
+ }
+
+ return false;
}
@Override
public boolean userAssignmentExists( UserAssignment assignment )
{
- return getRbacManagerForWrite().userAssignmentExists( assignment );
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ boolean exists = rbacManager.userAssignmentExists( assignment );
+ if ( exists )
+ {
+ return true;
+ }
+ }
+ catch ( Exception e )
+ {
+ // no op
+ }
+ }
+
+ return false;
}
public List<UserAssignment> getAllUserAssignments()
throws RbacManagerException
{
- // iterate
- return getRbacManagerForWrite().getAllUserAssignments();
+ Map<String, UserAssignment> allUserAssignments = new HashMap<String, UserAssignment>();
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ List<UserAssignment> userAssignments = rbacManager.getAllUserAssignments();
+ for ( UserAssignment ua : userAssignments )
+ {
+ allUserAssignments.put( ua.getPrincipal(), ua );
+ }
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return new ArrayList<UserAssignment>( allUserAssignments.values() );
}
public List<UserAssignment> getUserAssignmentsForRoles( Collection<String> roleNames )
throws RbacManagerException
{
- // iterate ?
- return getRbacManagerForWrite().getUserAssignmentsForRoles( roleNames );
+ List<UserAssignment> allUserAssignments = new ArrayList<UserAssignment>();
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ List<UserAssignment> userAssignments = rbacManager.getUserAssignmentsForRoles( roleNames );
+
+ allUserAssignments.addAll( userAssignments );
+
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return allUserAssignments;
}
public void removeUserAssignment( UserAssignment userAssignment )
throws RbacObjectNotFoundException, RbacObjectInvalidException, RbacManagerException
{
- getRbacManagerForWrite().removeUserAssignment( userAssignment );
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
+ {
+ try
+ {
+ rbacManager.removeUserAssignment( userAssignment );
+ allFailed = false;
+ }
+ catch ( Exception e )
+ {
+ lastException = e;
+ }
+ }
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
}
@Override
public boolean roleExists( String name )
throws RbacManagerException
{
- boolean exists = false;
- for ( RBACManager manager : rbacManagersPerId.values() )
+ boolean allFailed = true;
+ Exception lastException = null;
+ for ( RBACManager rbacManager : rbacManagersPerId.values() )
{
- exists = manager.roleExists( name );
- if ( exists )
+ try
+ {
+ boolean exists = rbacManager.roleExists( name );
+ if ( exists )
+ {
+ return true;
+ }
+ }
+ catch ( Exception e )
{
- return true;
+ lastException = e;
}
}
- return exists;
+
+ if ( lastException != null && allFailed )
+ {
+ throw new RbacManagerException( lastException.getMessage(), lastException );
+ }
+ return false;
}
@Override