2016-08-02 44 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)特性。 –

相关问题