in redback-integrations/redback-rest/redback-rest-services/src/main/java/org/apache/archiva/redback/rest/services/DefaultRoleManagementService.java [683:758]
public ActionStatus updateUserRoles( org.apache.archiva.redback.rest.api.model.User user )
throws RedbackServiceException
{
String username = user.getUsername();
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" ) );
}
}
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
{
UserAssignment assignment;
if ( rbacManager.userAssignmentExists( username ) )
{
assignment = rbacManager.getUserAssignment( username );
}
else
{
assignment = rbacManager.createUserAssignment( username );
}
List<String> assignedRoleIds = user.getAssignedRoles().stream().map(roleName -> {
try
{
return Optional.of( rbacManager.getRole( roleName ).getId( ) );
}
catch ( RbacManagerException e )
{
return Optional.<String>empty( );
}
} ).filter( Optional::isPresent ).map(Optional::get).collect( Collectors.toList());
assignment.setRoleIds( assignedRoleIds );
rbacManager.saveUserAssignment( assignment );
}
catch ( RbacManagerException e )
{
RedbackServiceException redbackServiceException =
new RedbackServiceException( new ErrorMessage( e.getMessage() ) );
redbackServiceException.setHttpErrorCode( Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() );
throw redbackServiceException;
}
return ActionStatus.SUCCESS;
}