2016-08-02 43 views
1

我用laravel授權在我的代碼,如圖所示的文檔中定義在我的服務提供商的方法之前:如何檢查Gate :: before方法是否被使用?

public function before($user, $ability) 
{ 
    if ($user->email == '[email protected]') { 
     return true; 
    } 
} 

有時候,我需要知道,如果支票被攔截。因此,我不想在不同的地方檢查郵件(或超級用戶的任何其他條件),我想檢查是否使用了這種攔截方法。我的意思是不是一次又一次地在不同的地方使用它(如果電子郵件是平等的)。我只想設置這個超級管理條件一次(在服務提供商中),然後在需要時檢查它。喜歡的東西:

\Gate::isIntercepted 

回答

2

而不是簡單地返回true的,你可以返回一個授權響應:

public function before($user, $ability) 
{ 
    if ($user->email == '[email protected]') { 
     return $this->allow('superadmin'); 
    } 
} 

你會得到的迴應以後,如果你使用authorize

public function update(Post $post) 
{ 
    $response = $this->authorize($post); 

    if ($reponse->message() == 'superadmin') { 
     // do something 
    } 
} 
+0

第一非常感謝。我是laravel新手。你能詳細解釋一下嗎? – Skeletor

+0

當我使用「返回$ this->允許('superadmin')」我得到了一個錯誤。調用未定義的方法[allow]。 – Skeletor

+1

@Skeletor - 你必須使用['HandlesAuthorization'](https://github.com/laravel/framework/blob/5.2/src/Illuminate/Auth/Access/HandlesAuthorization.php)特性。 –

相關問題