我在我的Laravel應用程序(我從Laravel 3升級到Laravel 4)中使用了用於訪問控制的程序包Authority。對於訪問規則的單元測試,我需要能夠調用Authority :: can()作爲另一個用戶。Laravel Authority - 如何以另一個用戶身份調用Authority :: can()?
在Laravel 3 Authority,我使用的as_user()方法:
Authority::as_user($user);
$this->assertTrue(Authority::cannot('read', 'Notifications')); //true
Authority::as_user($superuser);
$this->assertTrue(Authority::can('read', 'Notifications')); //true
在Laravel 4 Authority,一些語法/ API的已改變和as_user()不再存在。我已經嘗試了兩種選擇,但我沒有得到預期的結果。
嘗試1(使用驗證::登錄()切換用戶):
Auth::login($user);
$this->assertTrue(Authority::cannot('read', 'Notifications')); //true
Auth::logout();
Auth::login($superuser);
$this->assertTrue(Authority::can('read', 'Notifications')); //false (wrong!)
Auth::logout();
印刷驗證::用戶() - >名在測試示出了用戶已切換。但是打印$ this-> getCurrentUser() - >名稱作爲內的黑客權限:: can()函數顯示用戶未在此範圍內切換(因此導致錯誤的結果)。
嘗試2:(使用權限:: setCurrentUser()切換用戶)
Authority::setCurrentUser($user);
$this->assertTrue(Authority::cannot('read', 'Notifications'));
Authority::setCurrentUser($superuser);
$this->assertTrue(Authority::can('read', 'Notifications'));
//exception!
但在這種情況下,我得到一個異常:
Trying to get property of non-object
/var/www/project/app/config/packages/machuga/authority-l4/config.php:9
9號線管理局配置發生異常的文件表明當前用戶未按預期設置:
8: $user = $authority->getCurrentUser();
9: if(count($user->roles) === 0) return false;
對於正常的應用程序使用情況(即不在單元測試中切換用戶)權限似乎按預期行事。
我在做什麼錯?