How to retrieve the list of users based on role hierarchy

How to retrieve the list of users based on Role Hierarchy in Salesforce?

How to retrieve the list of users based on Role Hierarchy in Salesforce: Sometimes, you need a multilevel hierarchy i.e. you need to view the individual data/reports of all the employees who are the working under you. So, you need to find all the users directly under a role and its sub roles in the role hierarchy. Here is what I have written a sample piece of code which will be easier for you to get users on basis of role.


public class hierarchialInfoController{
    public Id currentUserId{get;set;} // To get the id of current User(logged-in User)
    public Id currentUserRoleId{get;set;} //
    public User loggedInUser{get;set;}
    public set<Id> usersIds{get;set;}
    public hierarchialInfoController(){        
  // Get the id of the current user.        
  currentUserId = UserInfo.getUserId();
  // Get the role id of the current user.         
  currentUserRoleId = UserInfo.getUserRoleId();
        usersIds = new set<Id>();
        loggedInUser = [Select id, Name from User where Id=:currentUserId];
    // Method to return the list of users on the basis of role hierarchy.
    public List<SelectOption> getUsersList() {
       List<SelectOption> userList = new List<SelectOption>();
       userList.add(new SelectOption(loggedInUser.Id,loggedInUser.Name));
       // roleHierarchyUtilityClass is the utility class which returns the list of users which are below the role of Current User.
       Set<Id> allUsers = roleHierarchyUtilityClass.getRoleSubordinateUsers(currentUserRoleId); 
       for(User usr : [Select id, name from User where id =:allUsers]){
           userList.add(new SelectOption(, usr.Name));
       return userList;

Helper Class:

public with sharing class roleHierarchyUtilityClass {
    public static Set<ID> getRoleSubordinateUsers(Id roleId) {
  // To get all sub roles.
        Set<Id> allSubRoleIds = getAllSubRoleIds(new Set<ID>{roleId});
        Map<Id,User> users = new Map<Id, User>([Select Id, Name From User where IsActive = True AND UserRoleId IN :allSubRoleIds]);
        return users.keySet();
    public static Set<ID> getAllSubRoleIds(Set<ID> roleIds) {
        Set<ID> currentRoleIds = new Set<ID>();
  // Get all the roles underneath the passed roles.
        for(UserRole userRole :[select Id from UserRole where ParentRoleId IN :roleIds AND ParentRoleID != null])
        if(currentRoleIds.size() > 0){
        return currentRoleIds;

Hope this will help you alot to understand the role hierarchy in APEX.

Thanks for reading

Hail Salesforce.

Refrences –


Leave a Reply


We're not around right now. But you can send us an email and we'll get back to you, asap.


About Us

Forcetalks is a Salesforce collaboration platform for coders & developers, geeks & nerds, consultants & business heads, admins & architects, managers & marketers and of course the business owners. A community where you can learn from, where you can contribute to. For you. For Salesforce. Read More...

Copyright 2020 Forcetalks. All Right Reserved.

Log in with your credentials


Forgot your details?