Question

In Magento 2, We want to list all user email id's by using their role_name.

How we can achieve in one collection with optimal way?

Thanks!

Was it helpful?

Solution

you can create a helper like below and pass the role name to filter it.

public function getUserByRole($roleName)
{
    /** @var $userCollection \Magento\User\Model\ResourceModel\User\Collection*/
    $userCollection->getSelect()->joinLeft(
        ['role' => $userCollection->getTable('authorization_role')],
        "main_table.user_id = role.user_id",
        ["role_name"]
        )->where("role.role_name = ". $roleName);
    return $userCollection;

}

By calling the above helper you will have collection of all the users of respective role.

Hope this helps.

OTHER TIPS

try below code:

$roleName = "Administrators";
$objectManager =  \Magento\Framework\App\ObjectManager::getInstance();
$roleModel = $objectManager->create('Magento\Authorization\Model\Role');
$userModel = $objectManager->create('Magento\User\Model\User');
$roleModel = $roleModel->load($roleName, 'role_name');
if($roleModel->getId()) {
    $userIds = $roleModel->getRoleUsers();
    foreach($userIds as $userId) {
        $user = $userModel->load($userId);      
        print_r($user->getEmail());
        echo "<br>";                                   
    }
}

Multiples Role name

  $rolesModel = $objectManager->create('Magento\Authorization\Model\ResourceModel\Role\Collection');
  $rolesModel->addFieldToFilter('role_name', array('in' => array('Administrators','xyz')));

  if($rolesModel->getSize()) {
      foreach($rolesModel as $roleModel) {
          $userIds = $roleModel->getRoleUsers();
            foreach($userIds as $userId) {
                $user = $userModel->load($userId);      
                print_r($user->getEmail());
                echo "<br>";                                   
            }
      }
  }

After digging , I got solution like this:

<?php
    namespace Custom\ProductApproval\Helper;

    use Magento\Authorization\Model\RoleFactory;
    use Magento\User\Model\UserFactory;


    class Data extends \Magento\Framework\App\Helper\AbstractHelper {

        protected $roles;
        protected $user;
        protected $objectManager;

        const ROLES_NAMES = "HOD Merchandising";

        public function __construct(\Magento\Framework\App\Helper\Context $context, \Magento\Backend\Model\Session $session, RoleFactory $roles, UserFactory $user
        ) {

            parent::__construct($context);
            $this->_session = $session;
            $this->roles = $roles;
            $this->user = $user;
            $this->objectManager = $objectManager;
        }


        public function getEmailUserByRole() {
            //$roleName = "HOD Merchandising";
            $userEmail = array();
            $roleModel = $this->roles->create();
            $userModel = $this->user->create();
            $roleModel = $roleModel->load(self::ROLES_NAMES, 'role_name');
            if ($roleModel->getId()) {
                $userIds = $roleModel->getRoleUsers();
                foreach ($userIds as $userId) {
                    $user = $userModel->load($userId);
                    $userEmail[]= $user->getEmail();
                }

            }
            return $userEmail;
        }

    }
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top