我正在使用本机CDbAuthManager
在我的webapp中实现RBAC。如何获得有权执行角色的所有用户?假设我有一个名为updateprofile
的角色。我希望将所有用户分配到该角色。我搜索了文档,无法找到函数。
(我知道我可以遍历所有用户模型并在checkAccess()
循环中执行foreach
,但我更喜欢更好的解决方案)
答案 0 :(得分:2)
我发现这样做的最简单方法是创建一个映射到auth_assignment表的AuthAssignment模型。然后,您可以为它设置关系,范围等,并使用它来查询所有用户模型。 auth_assignment表没有什么特别之处(因为它主要只是那里的角色)。
答案 1 :(得分:2)
代码
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() ;
}....
答案 2 :(得分:1)
我认为其他回复并没有给你完美的结果,因为角色可以是分层的,因此,你不能使用直接查询或关系。我的解决方案运作良好是:
// 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)
}