gpt4 book ai didi

php - 在 Yii Framework 中实现基于角色的授权

转载 作者:可可西里 更新时间:2023-11-01 00:49:16 25 4
gpt4 key购买 nike

我一直在学习本教程,顺便说一句,这很棒,我有一个问题。

http://www.larryullman.com/2010/01/07/custom-authentication-using-the-yii-framework/

我可以在我的应用程序代码中的任何地方像这样访问角色属性:

Yii::app()->user->role

但是,我真正想做的是在我的 UserController 中使用默认 Controller 授权:

/**
* 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)。

关于将 accessRules 方法与 Larry 的方法结合使用时,我有什么想法吗?

谢谢!

最佳答案

从您的代码来看,您似乎想将此规则应用于所有操作,为此您需要保留未指定的操作数组或空数组:

//empty actions
array('allow',
'actions'=>array(),//array('*'),
...
)

或未指定:

array('allow',  // allow all users to perform 'index' and 'view' actions
//'actions'=>array('*'),
...
)

这已经是 documented in the docs :

array( 'allow', // or 'deny'
// optional, list of action IDs (case insensitive) that this rule applies to
// if not specified, rule applies to all actions
'actions'=>array('edit', 'delete'),

请记住,角色数组也是一个包含角色名称的数组,例如:

'roles'=>array('role1','role2','role3')

那么你就不需要“表达式”了,因为你在那里所做的一切都已经用角色数组完成了。

编辑:看了你链接的教程后,好像他还没有实现RBAC . 'roles' 选项使用 rbac,因此没有它就无法工作。因此,您必须改用 'expression' 选项,而您的 'expression' 选项看起来不错。

关于php - 在 Yii Framework 中实现基于角色的授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com