Search users in membership

1
0
-1

Hi. I try to search the list of users with a certain membership. I looked in the IdentityAPI but there is no method "getUsersInMembership".

Currently, I do this :

List<User> usersInGroup = apiAccessor.getIdentiyAPI().getUserInGroup(mygroup.getId());
List<User> usersInRole = apiAccessor.getIdentityAPI().getUserInRole(myRole.getId());

List<User> usersInMembership = new ArrayList<User>();
for(User user : usersInGroup) {
if(userInRole.contains(user)) usersInMembership.add(user);
}

This works fine but I want to know if there is a single method to do this. Did a "getUsersInMembership" method exists ?

I also found a method "searchUsers()" in the IdentityAPI ( here ), but I don't understand what the parameter is. Maybe it can help me. Did you have an exemple on how to use this method ?

1 answer

1
+1
-1
This one is the BEST answer!

Hi, You should indeed use the method searchUsers() for that with a searchOption filtering on both the group ID and the Role ID.

Something like:

        SearchOptionsBuilder optionsBuilder = new SearchOptionsBuilder(startIndex, maxResults);
        optionsBuilder.filter(UserSearchDescriptor.GROUP_ID, groupId);
        optionsBuilder.filter(UserSearchDescriptor.ROLE_ID, roleId);
        searchUsers(optionsBuilder.done());

HTH

Comments

Submitted by yannick.lombardi on Wed, 03/25/2015 - 16:58

Hi, The problem is that I don't know how to use the SearchOptions object. It doesn't have any constructor.

EDIT : Thanks for adding code. I will try this.

Submitted by yannick.lombardi on Thu, 03/26/2015 - 10:10

It works fine. I use this code :

import org.bonitasoft.engine.identity.User;
import org.bonitasoft.engine.identity.Role;
import org.bonitasoft.engine.identity.Group;
import org.bonitasoft.engine.search.SearchOptionsBuilder;
import org.bonitasoft.engine.search.SearchResult;
import org.bonitasoft.engine.identity.UserSearchDescriptor;

SearchResult<User> searchList = null;

try {
        Role RM = apiAccessor.getIdentityAPI().getRoleByName("Release Manager");
        int nbRM = apiAccessor.getIdentityAPI().getNumberOfUsersInRole(RM.getId());
       
        Group releaseGroup = apiAccessor.getIdentityAPI().getGroupByPath(idRelease);
       
        SearchOptionsBuilder optionsBuilder = new SearchOptionsBuilder(0, nbRM);
        optionsBuilder.filter(UserSearchDescriptor.GROUP_ID, releaseGroup.getId());
        optionsBuilder.filter(UserSearchDescriptor.ROLE_ID, RM.getId());
        searchList = apiAccessor.getIdentityAPI().searchUsers(optionsBuilder.done());
               
} catch (Exception e) {
        return new ArrayList<User>();;
}

return new ArrayList<User>(searchList.getResult());
Notifications