【问题标题】:Get users of a particular role in magento在magento中获取特定角色的用户
【发布时间】:2016-03-10 19:06:58
【问题描述】:

有没有办法让 Magento 中特定角色的用户(比如员工)? 我试过这个

$roles_users = Mage::getResourceModel('admin/roles_user_collection');

但不知道如何为特定角色添加过滤器。

提前致谢

【问题讨论】:

    标签: php magento magento-1.9


    【解决方案1】:

    如果您仔细查看 magento 如何存储管理员角色和用户,您会更好地理解这一点。

    假设您创建了一个角色staff,magento 将该角色存储在admin_role 表中。创建新用户时,用户数据存储在admin_user 表中,与admin_role 表完全没有关联。但是,当您为该用户分配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;
    

    希望对你有帮助。

    【讨论】:

    【解决方案2】:

    在 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));
    

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 2021-05-05
      • 2014-08-31
      • 2021-12-11
      • 2016-12-03
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      相关资源
      最近更新 更多