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

YII中管理授权的首选方式是什么?,yii,rbac,Yii,Rbac,现在,我是YII的新手,一直致力于身份验证和授权。我已经成功地管理了身份验证部分,现在我正在遵循YII-RBAC。在这里我有点困惑。根据我可以使用的文档 if( Yii::app()->user->checkAccess('createIssue')) 检查用户是否具有createIssue操作的权限。根据我的理解,我可以在preFilter()中为操作添加此选项,以便在执行操作之前检查访问权限 我的问题是,如果我使用RBAC方法,我应该仍然在控制器的accessRules()函数

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

if( Yii::app()->user->checkAccess('createIssue'))
检查用户是否具有createIssue操作的权限。根据我的理解,我可以在preFilter()中为操作添加此选项,以便在执行操作之前检查访问权限


我的问题是,如果我使用RBAC方法,我应该仍然在控制器的accessRules()函数中定义访问规则,还是只允许所有用户访问并在预过滤器中检查单个操作的访问权限。我不知道我更喜欢哪种方式。请指导我,谢谢

RBAC是Yii授权方法家族中accessRules()的大哥。它更加健壮、强大,通常用于更复杂的用例,但这取决于您的需求和趋势

使用RBAC时,不需要(最好不要)使用Yii的accessRules()检查权限,后者使用预定义的Yii过滤器。请确保不要错过定义方法accessRules(),您还需要告诉Yii在操作方法上使用过滤器“accessControl”。所以简而言之,不要两者都用。同时丢失filters指令(或整个方法,如果没有定义其他筛选器)和“accessRules()”方法

默认情况下,RBAC将咨询“身份验证项”层次结构和分配给数据库中用户的身份验证项。您可以自己管理DB,但我强烈建议您考虑使用几个现成的扩展来管理(仅)RBAC的3个表。例如,和。这两者都不是没有bug的,但如果您有一个非常琐碎的权限树,则可以减少大量工作

最后但并非最不重要的一点是,请务必阅读指南中的说明。

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

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

其中,
$params
是一个可选的参数数组,您要传递给
user->checkAccess($itemName,$params)

默认的
accessRules
只是,如果您使用RBAC,您应该定义自己的操作过滤器,因为
accessRules
的功能有些重复(但简化了)。仅供参考,要完全理解RBAC,此视频非常有帮助: