检查用户是否有权在Yii RBAC中操作


Check if user has access to operation in Yii RBAC

我使用Yii在我的应用程序中实现了基本的RBAC功能。角色、任务和操作都设置好了,运行良好。

我想要完成的是:在用户登录时,检查用户是否有权登录到我的应用程序的这个特定区域。有一项任务是专门针对这个任务的。然而,问题是,首选的检查方法是允许用户使用操作CWebUser::checkAccess,这在登录中不可用,因为Yii登录工作流是这样的:

  • 用户提供认证所需的信息。
  • 使用用户提供的信息创建身份实例。
  • 调用IUserIdentity::authenticate检查身份是否有效。
  • 如果调用CWebUser::login登录用户,并对用户进行重定向浏览器来返回nurl。
  • 如果无效,检索错误代码或消息,并显示它。

from here

通过Yii::app()->user全局可用的CWebUser实例在登录状态下不传播,(列出项目2和3)这对我来说非常有意义。然而,为了调用checkAccess,我需要一个CWebUser实例。CAuthManager似乎没有提供我需要的功能,因为它是(没有方法来检查用户是否具有一定的原子权限(操作)或列出所有它们)。在我的示例中,所需的操作通常是与角色一起分配的,但是谁知道呢——有人可能只访问登录这一个操作,这是我想讨论的一种情况。

非常感谢!

CAuthManager已经有一个checkAccess方法,它执行您所需要的。更多信息请查看Yii官方文件:

IAuthManager