【问题标题】:How to check access for Guest in unit tests in Yii?如何在 Yii 的单元测试中检查访客的访问权限?
【发布时间】:2011-10-13 18:54:43
【问题描述】:

我有一个用 Yii 1.1.8 编写的应用程序。

我目前正在开发一组单元测试来涵盖用户访问权限。我正在使用 yii-rights 模块,我发现了一件奇怪的事情。

Yii::app()->user->checkAccess($operation)

在单元测试中总是返回 false(而不是在浏览器中运行应用程序时)。

我找到了一种解决方法,我正在调用

Yii::app()->getAuthManager()->checkAccess($operation, $userId)

检查经过身份验证的用户的访问权限,但有一个问题 - 我有一些来宾用户需要访问的 authItems。而且我的测试失败了,因为来宾用户没有 id,所以我不能从 CDbAuthManager 类调用 CheckAccess()。 CWebUser 的 checkAccess() 也由于一些错误而失败。

在每次测试之前,我都会调用身份验证代码并且它可以正常工作 - 正确地为经过身份验证的用户授予(或拒绝,取决于权限配置)访问权限,并且 Yii::app()->user 也已正确设置。

所以我的问题是:我怎样才能让 Yii::app()->user->checkAccess($operation) 在单元测试中工作,或者有没有办法让访客用户的某种 id 使用其他 checkAccess() 函数?还是有其他我不知道的检查访问权限的方法?

【问题讨论】:

    标签: php unit-testing authentication yii


    【解决方案1】:

    好的,我找到了该怎么做。其实很简单。

    我只给了一个用户来宾角色,我以这个用户身份进行身份验证,因此我可以获得来宾用户 ID :D。

    希望这可以帮助某人:)。如果有人知道更好的方法,我将很乐意阅读:D。

    【讨论】:

      【解决方案2】:

      它有点老,但可以帮助其他人,你可以简单地在 authManager 的 defualtRoles 中为客人添加一个角色

      'authManager'=>array(
              'class'=>'CDbAuthManager',
              'connectionID'=>'db',
              'defaultRoles'=>array('Guest'),
          ),
      

      所以不需要为访客添加用户

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 2013-11-28
        • 2015-03-06
        • 2018-08-31
        • 1970-01-01
        相关资源
        最近更新 更多