在YII中管理授权的首选方式是什么?

时间:2013-07-16 11:16:52

标签: yii rbac

现在,我是YII的新手,我一直致力于身份验证和授权。我已经成功管理了认证部分,现在我正在关注YII RBAC。在这里,我有点困惑。根据我可以使用的文档

if( Yii::app()->user->checkAccess('createIssue'))

检查用户是否拥有 createIssue 操作的权限。根据我的理解,我可以在preFilter()中添加它,以便在执行操作之前检查访问权限。

我的问题是,如果我使用RBAC方法,我是否应该仍然在控制器的accessRules()函数中定义访问规则,或者应该只允许所有用户并在preFilter中为个人检查访问权限行动。我很困惑什么是首选的方式。请指导我,谢谢

2 个答案:

答案 0 :(得分:7)

在Yii授权方法系列中,RBAC是accessRules()的更大兄弟。它更强大,功能更强大,通常用于更复杂的用例,但这取决于您的要求和趋势。

当您使用RBAC时,您不需要(并且最好没有)使用Yii的accessRules()检查权限,该权限使用预定义的Yii过滤器。一定不要错过定义accessRules()方法,你还需要告诉Yii对action方法使用过滤器'accessControl'。所以简而言之 - 不要同时使用两者。丢失filters指令(或整个方法,如果没有定义其他过滤器)和'accessRules()'方法。

默认情况下,RBAC将就“auth items”层次结构和分配给DB中用户的auth项进行咨询。您可以自己管理数据库,但我强烈建议您考虑使用几个现成的扩展来管理(仅)RBAC的3个表。例如,RBAMSRBAC。两者都不是没有错误的,但是如果你有一个超过普通权限的树,就减少大量的工作。

最后但同样重要的是,请务必阅读指南中的relevant page

答案 1 :(得分:2)

RBAC与CController :: accessRules()

一起使用

从Yii 1.1.11开始,您可以在accessRules() filter中使用RBAC。文档提供了一个示例,但要点是您的规则如下所示:

    'roles' =>array('itemName' =>$params),

$params是一个可选的参数数组,只是您传递给user->checkAccess($itemName, $params)的内容。