我有一个用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()函数?或者还有其他方法可以检查我不知道的访问权限吗?
答案 0 :(得分:2)
好的,我找到了该怎么做。实际上很简单。
我只向一个用户提供了Guest角色,我作为此用户进行身份验证,因此我可以获得访客用户ID:D。
希望这有助于某人:)。如果有人知道更好的方式,我会高兴地阅读它:D。
答案 1 :(得分:1)
它有点旧但可以帮助其他人,你只需在默认的authManager角色中为guest添加角色
'authManager'=>array(
'class'=>'CDbAuthManager',
'connectionID'=>'db',
'defaultRoles'=>array('Guest'),
),
所以不需要为访客添加用户