in redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultRoleManagementService.java [577:681]
public List<ApplicationRoles> getApplicationRoles( String username )
throws RedbackServiceException
{
AdminEditUserCredentials user = null;
if ( StringUtils.isEmpty( username ) )
{
throw new RedbackServiceException( new ErrorMessage( "rbac.edit.user.empty.principal" ) );
}
try
{
if ( !userManager.userExists( username ) )
{
throw new RedbackServiceException(
new ErrorMessage( "user.does.not.exist", new String[]{ username } ) );
}
User u = userManager.findUser( username );
if ( u == null )
{
throw new RedbackServiceException( new ErrorMessage( "cannot.operate.on.null.user" ) );
}
user = new AdminEditUserCredentials( u );
}
catch ( UserNotFoundException e )
{
throw new RedbackServiceException(
new ErrorMessage( "user.does.not.exist", new String[]{ username, e.getMessage() } ) );
}
catch ( UserManagerException e )
{
throw new RedbackServiceException( new ErrorMessage( e.getMessage() ) );
}
try
{
// check first if role assignments for user exist
if ( !rbacManager.userAssignmentExists( username ) )
{
UserAssignment assignment = rbacManager.createUserAssignment( username );
rbacManager.saveUserAssignment( assignment );
}
List<? extends org.apache.archiva.redback.rbac.Role> allRoles =
filterRolesForCurrentUserAccess( rbacManager.getAllRoles() );
List<ModelApplication> modelApplications = roleManager.getModel().getApplications();
List<ApplicationRoles> applicationRolesList = new ArrayList<>( modelApplications.size() );
for ( ModelApplication modelApplication : modelApplications )
{
ApplicationRoles applicationRoles = new ApplicationRoles();
applicationRoles.setDescription( modelApplication.getDescription() );
applicationRoles.setName( modelApplication.getId() );
Collection<? extends org.apache.archiva.redback.rbac.Role> appRoles =
filterApplicationRoles( modelApplication, allRoles, modelApplication.getTemplates() );
List<String> roleNames = new ArrayList<>( toRoleNames( appRoles ) );
Collections.sort( roleNames );
applicationRoles.setGlobalRoles( roleNames );
Set<String> resources = discoverResources( modelApplication.getTemplates(), appRoles );
applicationRoles.setResources( resources );
applicationRoles.setRoleTemplates( toRoleTemplates( modelApplication.getTemplates() ) );
// cleanup app roles remove roles coming from templates
List<String> appRoleNames = new ArrayList<>( appRoles.size() );
for ( String appRoleName : applicationRoles.getGlobalRoles() )
{
if ( !roleFromTemplate( appRoleName, modelApplication.getTemplates() ) )
{
appRoleNames.add( appRoleName );
}
}
Collections.sort( appRoleNames );
applicationRoles.setGlobalRoles( appRoleNames );
Collections.sort( appRoleNames );
applicationRolesList.add( applicationRoles );
}
return applicationRolesList;
}
catch ( RbacManagerException e )
{
RedbackServiceException redbackServiceException =
new RedbackServiceException( new ErrorMessage( e.getMessage() ) );
redbackServiceException.setHttpErrorCode( Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() );
throw redbackServiceException;
}
}