2017-05-08 75 views
1

我使用zizaco /委託包多AUTH包名稱Hesto /旁邊我laravel項目多權威性檢查角色和權限在zizaco /委託laravel包

我們對laravel 5.4項目,

我得到以下錯誤,當我想當前登錄用戶的角色和權限使用此方法: Entrust::hasRole('role-name');Auth::user()->hasRole('role-name');

但我CAN個接入用戶用這種方法,例如角色:

$user = User::find($userid); 
dd($user->hasRole('admin')); // Return true 

我嚴格遵循安裝指導,但我得到以下錯誤:

`Non-static method Zizaco\Entrust\Entrust::hasRole() should not be called statically` 

我怎樣才能解決我的問題,提前 感謝

+0

檢查'use'語句。你在使用班級還是「門面」?你想要使用外觀。 –

+0

您可能會使用錯誤的類。你有沒有試過使用'\ Entrust :: hasRole();'。尚未測試,但解決方案是,你需要使用EntrustFacade在這裏提到:https://github.com/Zizaco/entrust/blob/master/src/Entrust/EntrustFacade.php – PaladiN

+0

@PaladiN它適用於我,和我在'user()'方法的'vendor/zizaco/entrust/src/Entrust/Entrust.php'中獲得了當前登錄用戶的另一個問題。因爲使用'Hesto/MultiAuth'前一個返回無法檢索當前用戶,爲了解決這個問題,我改變了返回'$ this-> app-> auth-> user();'返回'Auth :: guard ('user') - > user();'但我認爲使用Entrust Fecade仍然存在問題 –

回答

2

在此錯誤消息中,您已回答您的問題:

非靜態方法Zizaco \委託\委託:: hasRole()不應該靜態

叫你調用此方法hasRole()靜態,但這種方法是非靜態的。這意味着你需要創建這個類的對象,但是你使用了一個類。

在你給的例子:

$user = User::find($userid); 
dd($user->hasRole('admin')); // Return true 

創建User類和類User(我認爲)的一個對象實現Entrust類:

$user = User::find($userid); 

$user是一個對象,它不是靜態的,你可以使用hasRole()。

換句話說,使用方法hasRole()(字面意思 - 是有人有一個角色?)你需要這個someone

$user->hasRole('admin') // Is this user has role `admin`? 

希望,我解釋了吧。對不起我的英語(我剛剛學習)。