获取magento中特定角色的用户
Get users of a particular role in magento
有没有什么方法可以在 Magento 中获取特定角色(比如员工)的用户?
我试过这个
$roles_users = Mage::getResourceModel('admin/roles_user_collection');
但不知道如何为特定角色添加过滤器。
提前致谢
如果你仔细看看 magento 如何存储管理员角色和用户,你会更好地理解这一点。
假设您创建了一个角色 staff
,magento 将这个角色存储在 admin_role
table 中。当您创建新用户时,用户数据存储在 admin_user
table 中,它与 admin_role
table 完全没有关联。但是,当您为该用户分配 staff
角色时,此分配本身会再次创建一个新的管理员角色。本质上,用户本身被视为管理员角色。
这应该可以完美运行:
$output = []; // just an array to hold all the users, you may not need this
// instance of the admin_role
$model = Mage::getModel('admin/role');
// fetch all roles with name of 'Staff', but get only the first item since two roles cannot have same name
$role = $model->getCollection()
->addFieldToFilter('role_name', ['eq' => 'Staff'])
->getFirstItem();
// check to make sure the role exists
if ($roleId = $role->getId())
{
// get a collection of all the user roles having the Staff role id as a parent_id
$staffUsers = $model->getCollection()
->addFieldToFilter('parent_id', ['eq' => $roleId]);
// ensure the collection has size
if ($staffUsers->getSize())
{
// loop through each object and get the user_id values
foreach ($staffUsers as $staffUser)
{
// you can still check to make sure the user_id field is not null
if ($staffUser->getUserId())
{
// get the user object and do anything with it
$user = Mage::getModel('admin/user')->load($staffUser->getUserId());
$output[$user->getId()] = $user->getFirstname() . " " . $user->getLastname();
}
}
}
}
var_dump($output); die;
希望对您有所帮助。
在 magento 2 中,您可以使用自定义查询来实现此目的。
$shippercollection = $objectManager->create('Magento\User\Model\ResourceModel\User\Collection');
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
$tableName = $resource->getTableName('authorization_role');
$filter = 'Shipper';
//Select Shipper users id from table
$sql = "Select user_id FROM " . $tableName." WHERE parent_id = (Select role_id FROM " . $tableName." WHERE role_name = '$filter' LIMIT 1)";
$shipper_users = $connection->fetchAll($sql);
$shippermodel = $objectManager->create('Magento\User\Model\User');
$deliveryBoys = $shippermodel->getCollection()
->addFieldToFilter('user_id', array('in' => $shipper_users));
有没有什么方法可以在 Magento 中获取特定角色(比如员工)的用户? 我试过这个
$roles_users = Mage::getResourceModel('admin/roles_user_collection');
但不知道如何为特定角色添加过滤器。
提前致谢
如果你仔细看看 magento 如何存储管理员角色和用户,你会更好地理解这一点。
假设您创建了一个角色 staff
,magento 将这个角色存储在 admin_role
table 中。当您创建新用户时,用户数据存储在 admin_user
table 中,它与 admin_role
table 完全没有关联。但是,当您为该用户分配 staff
角色时,此分配本身会再次创建一个新的管理员角色。本质上,用户本身被视为管理员角色。
这应该可以完美运行:
$output = []; // just an array to hold all the users, you may not need this
// instance of the admin_role
$model = Mage::getModel('admin/role');
// fetch all roles with name of 'Staff', but get only the first item since two roles cannot have same name
$role = $model->getCollection()
->addFieldToFilter('role_name', ['eq' => 'Staff'])
->getFirstItem();
// check to make sure the role exists
if ($roleId = $role->getId())
{
// get a collection of all the user roles having the Staff role id as a parent_id
$staffUsers = $model->getCollection()
->addFieldToFilter('parent_id', ['eq' => $roleId]);
// ensure the collection has size
if ($staffUsers->getSize())
{
// loop through each object and get the user_id values
foreach ($staffUsers as $staffUser)
{
// you can still check to make sure the user_id field is not null
if ($staffUser->getUserId())
{
// get the user object and do anything with it
$user = Mage::getModel('admin/user')->load($staffUser->getUserId());
$output[$user->getId()] = $user->getFirstname() . " " . $user->getLastname();
}
}
}
}
var_dump($output); die;
希望对您有所帮助。
在 magento 2 中,您可以使用自定义查询来实现此目的。
$shippercollection = $objectManager->create('Magento\User\Model\ResourceModel\User\Collection');
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
$tableName = $resource->getTableName('authorization_role');
$filter = 'Shipper';
//Select Shipper users id from table
$sql = "Select user_id FROM " . $tableName." WHERE parent_id = (Select role_id FROM " . $tableName." WHERE role_name = '$filter' LIMIT 1)";
$shipper_users = $connection->fetchAll($sql);
$shippermodel = $objectManager->create('Magento\User\Model\User');
$deliveryBoys = $shippermodel->getCollection()
->addFieldToFilter('user_id', array('in' => $shipper_users));