我正在使用本机CDbAuthManager
在我的 web 应用程序中实现 RBAC。如何获取所有有权执行角色的用户?假设我有名为updateprofile
. 我想获得分配给该角色的所有用户。我搜索了文档并找不到功能。
(我知道我可以遍历所有用户模型并循环执行checkAccess()
,foreach
但我更喜欢更好的解决方案)
像这样的代码
class AuthAssginment extends CActiveRecord{.....
public function getUsersBaseOnRole($role) {
return Yii::app()->db->createCommand()
->select('userid')
->from($this->tableName())
->where('itemname=:role', array(
':role' => $role,))
->queryAll() ;
}....
我发现最简单的方法是创建一个映射到您的 auth_assignment 表的 AuthAssignment 模型。然后,您可以为其设置关系、范围等,并使用它进行查询以检索所有用户模型。auth_assignment 表并没有什么特别之处(因为它主要只是其中的角色)。
我认为其他答复不会给您完美的结果,因为角色可以是分层的,因此您不能使用直接查询或关系。我运作良好的解决方案是:
// list all users with 'userManagement' role
if($users = Users::model()->findAll()) {
foreach($users as $id => $user) {
if(!$user->checkAccess('userManagement')) {
unset($users[$id]);
}
}
$users = array_values($users); // to reset indices (optional)
}