Php 如何在Yii2和DbManager中获得specefic角色的用户?
如何在Yii2中获取specefic角色的用户,在RBAC中获取DbManager 请介绍一些用于用户管理和角色管理的APIPhp 如何在Yii2和DbManager中获得specefic角色的用户?,php,yii,yii2,rbac,Php,Yii,Yii2,Rbac,如何在Yii2中获取specefic角色的用户,在RBAC中获取DbManager 请介绍一些用于用户管理和角色管理的API 我搜索并阅读,但没有找到任何解决方案。我使用@Manquer guide并编写了以下函数: public static function getRoleUsers($role_name) { $connection = \Yii::$app->db; $connection->open(); $comm
我搜索并阅读,但没有找到任何解决方案。我使用@Manquer guide并编写了以下函数:
public static function getRoleUsers($role_name)
{
$connection = \Yii::$app->db;
$connection->open();
$command = $connection->createCommand(
"SELECT * FROM auth_assignment INNER JOIN user ON auth_assignment.user_id = user.id " .
"WHERE auth_assignment.item_name = '" . $role_name . "';");
$users = $command->queryAll();
$connection->close();
return $users;
}
可能对某人有用。我编写了这个函数,可以添加到用户类中
/**
* Finds all users by assignment role
*
* @param \yii\rbac\Role $role
* @return static|null
*/
public static function findByRole($role)
{
return static::find()
->join('LEFT JOIN','auth_assignment','auth_assignment.user_id = id')
->where(['auth_assignment.item_name' => $role->name])
->all();
}
由于Yii版本2.0.7,它实现的
DbManager
和ManagerInterface
在没有自定义代码的情况下实现了您想要的功能。rbac\ManagerInterface没有为此提供API。您必须编写自己的,如果您使用DbManager进行RBAC,这相当简单,您只需编写一个DB查询即可。如果您使用的是PhpManager,那么它会稍微复杂一些,因为filemanger将数据存储在数组中,如[user][role],因此您必须首先转置数组以获取数据,或者遍历所有用户。谢谢。我根据您的指南编写了一个函数。使用这段代码,您可以按角色检索用户模型:$operatoriIds=Yii::$app->authManager->getUserIdsByRole('operator')$operators=User::find()->where(['id'=>$operatoriIds])->all();这是一个非常干净的解决方案,它对我很有效。通过使用左加入
,您还将获得与他们没有任何关联角色的用户。