3

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

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

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

我的问题是,如果我使用的是 RBAC 方法,我应该仍然在控制器的 accessRules() 函数中定义访问规则,还是应该只允许所有用户并在 preFilter 中检查个人操作的访问权限。我对首选的方式感到困惑。请指导我,谢谢

4

2 回答 2

7

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

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

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

最后但同样重要的是,请务必阅读指南中的相关页面

于 2013-07-16T11:51:44.843 回答
2

RBAC 与 CController::accessRules() 一起使用

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

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

where$params是一个可选的参数数组,就是你要传递给user->checkAccess($itemName, $params).

于 2013-08-01T21:57:06.947 回答