2013-11-01 50 views
0

我在我的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; 

對於正常的應用程序使用情況(即不在單元測試中切換用戶)權限似乎按預期行事。

我在做什麼錯?

回答

0

Laravel 4 Authority模塊(Matthew Machuga)的作者建議對一個新的Authority實例進行測試(注意:不是門面)。這也需要重新加載規則集:

$rules = Config::get('authority-l4::initialize', null); 

$authority = new Authority\Authority($user); 
$rules($authority); 
$this->assertTrue(Authority::cannot('read', 'Notifications')); //true 

$authority = new Authority\Authority($superuser); 
$rules($authority); 
$this->assertTrue(Authority::can('read', 'Notifications')); //true 

充分討論可以在Laravel forum可以看出。

相關問題