现在,我是YII的新手,我一直致力于身份验证和授权。我已经成功管理了认证部分,现在我正在关注YII RBAC。在这里,我有点困惑。根据我可以使用的文档
if( Yii::app()->user->checkAccess('createIssue'))
检查用户是否拥有 createIssue 操作的权限。根据我的理解,我可以在preFilter()中添加它,以便在执行操作之前检查访问权限。
我的问题是,如果我使用RBAC方法,我是否应该仍然在控制器的accessRules()函数中定义访问规则,或者应该只允许所有用户并在preFilter中为个人检查访问权限行动。我很困惑什么是首选的方式。请指导我,谢谢
答案 0 :(得分:7)
在Yii授权方法系列中,RBAC是accessRules()的更大兄弟。它更强大,功能更强大,通常用于更复杂的用例,但这取决于您的要求和趋势。
当您使用RBAC时,您不需要(并且最好没有)使用Yii的accessRules()检查权限,该权限使用预定义的Yii过滤器。一定不要错过定义accessRules()方法,你还需要告诉Yii对action方法使用过滤器'accessControl'。所以简而言之 - 不要同时使用两者。丢失filters指令(或整个方法,如果没有定义其他过滤器)和'accessRules()'方法。
默认情况下,RBAC将就“auth items”层次结构和分配给DB中用户的auth项进行咨询。您可以自己管理数据库,但我强烈建议您考虑使用几个现成的扩展来管理(仅)RBAC的3个表。例如,RBAM和SRBAC。两者都不是没有错误的,但是如果你有一个超过普通权限的树,就减少大量的工作。
最后但同样重要的是,请务必阅读指南中的relevant page。
答案 1 :(得分:2)
从Yii 1.1.11开始,您可以在accessRules() filter中使用RBAC。文档提供了一个示例,但要点是您的规则如下所示:
'roles' =>array('itemName' =>$params),
$params
是一个可选的参数数组,只是您传递给user->checkAccess($itemName, $params)
的内容。