如何在Yii的单元测试中检查Guest的访问权限?

时间:2011-07-26 21:25:23

标签: php unit-testing authentication yii

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

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

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

在单元测试中总是返回false(而不是在borwser中运行app时)。

我找到了一种解决方法,我打电话给

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

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

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

所以我的问题是:如何在单元测试中使Yii :: app() - > user-> checkAccess($ operation)工作,或者有什么方法可以获得某种访客用户ID使用其他checkAccess()函数?或者还有其他方法可以检查我不知道的访问权限吗?

2 个答案:

答案 0 :(得分:2)

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

我只向一个用户提供了Guest角色,我作为此用户进行身份验证,因此我可以获得访客用户ID:D。

希望这有助于某人:)。如果有人知道更好的方式,我会高兴地阅读它:D。

答案 1 :(得分:1)

它有点旧但可以帮助其他人,你只需在默认的authManager角色中为guest添加角色

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

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

相关问题