我一直在关注这个教程,这很棒,并且有一个问题.
http://www.larryullman.com/2010/01/07/custom-authentication-using-the-yii-framework/
我可以在我的应用程序代码中的任何位置访问这样的角色属性:
Yii::app()->user->role
Run Code Online (Sandbox Code Playgroud)
但是,我真正想做的是使用我的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('*'),
),
);
}
Run Code Online (Sandbox Code Playgroud)
看来实际验证accessRules中定义的规则的类实际上并不知道我为其分配的角色.CAccessControlFilter(对于那些不想在40分钟内搜索XD的人).
当我将它与Larry的方法结合起来时,有关如何使用accessRules方法的任何想法?
谢谢!
从您的代码看起来您希望将此规则应用于所有操作,为此您需要将actions数组保留为未指定或为空数组:
//empty actions
array('allow',
'actions'=>array(),//array('*'),
...
)
Run Code Online (Sandbox Code Playgroud)
或者未指明:
array('allow', // allow all users to perform 'index' and 'view' actions
//'actions'=>array('*'),
...
)
Run Code Online (Sandbox Code Playgroud)
这已在文档中记录:
array('allow',//或'deny'
//可选,此规则适用的操作ID列表(不区分大小写)
//如果未指定,则规则适用于所有操作
'actions'=> array('edit' ,'删除'),
请记住,roles数组又是一个带有角色名称的数组,例如:
'roles'=>array('role1','role2','role3')
Run Code Online (Sandbox Code Playgroud)
然后你不需要'表达式',因为你在那里所做的一切都已经完成了使用roles数组.
编辑:在阅读了您已链接的教程后,似乎他没有实现RBAC.该'roles'选项使用rbac,因此没有它就无法工作.因此,您将不得不使用该'expression'选项,并且您的'expression'选项看起来很好.
| 归档时间: |
|
| 查看次数: |
4058 次 |
| 最近记录: |