List all user email ids based on role_name in magento 2?
-
23-12-2020 - |
سؤال
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!
المحلول
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.
نصائح أخرى
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;
}
}
لا تنتمي إلى magento.stackexchange