我一直在关注这个教程,这很棒,并且有一个问题。
http://www.larryullman.com/2010/01/07/custom-authentication-using-the-yii-framework/
我可以在我的应用程序代码中的任何位置访问角色属性:
Yii::app()->user->role
但是,我真正想做的是使用我的UserController中的默认控制器授权:
/**
* Specifies the access control rules.
* This method is used by the 'accessControl' filter.
* @return array access control rules
*/
public function accessRules()
{
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('*'),
'users'=>array('@'),
// Fails
'roles'=>array(ModelConstantsRole::ADMIN),
// Also Fails
'expression'=>'(isset(Yii::app()->user->role) && (Yii::app()->user->role==ModelConstantsRole::ADMIN))',
),
array('deny', // deny all users
'users'=>array('*'),
),
);
}
实际验证accessRules中定义的规则的类似乎并不真正了解我已分配给它的角色。 CAccessControlFilter(适合那些不想在40分钟内搜索XD的人)。
当我将其与Larry的方法结合使用时,有关如何使用accessRules方法的任何想法?
谢谢!
答案 0 :(得分:5)
从您的代码中看起来您希望将此规则应用于所有操作,为此您需要将actions数组保留为未指定或空数组:
//empty actions
array('allow',
'actions'=>array(),//array('*'),
...
)
或未指明:
array('allow', // allow all users to perform 'index' and 'view' actions
//'actions'=>array('*'),
...
)
阵列( '允许',//或'拒绝' //可选,此规则适用于的操作ID列表(不区分大小写) //如果未指定,则规则适用于所有操作
'actions'=>数组('edit','delete'),
请记住,roles数组又是一个带有角色名称的数组,例如:
'roles'=>array('role1','role2','role3')
然后你不需要'表达式',因为你在那里做的所有事情都已经完成了角色数组。
编辑:在阅读了您已链接的教程后,似乎他没有实现RBAC。 'roles'
选项使用rbac,因此没有它就无法工作。因此,您必须使用'expression'
选项,而您的'expression'
选项看起来不错。
答案 1 :(得分:0)
尝试正确设置动作
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('view', 'delete', 'update'),