如何检查是否使用了Gate :: before方法?

时间:2016-08-02 12:47:50

标签: php laravel

我在代码中使用了laravel的授权,并在我的服务提供者中定义了before方法,如文档中所示:

public function before($user, $ability)
{
    if ($user->email == 'super@mail.com') {
        return true;
    }
}

有时我需要知道检查是否被截获。因此,我想检查是否使用了这种拦截方法,而不是检查不同地方的邮件(或超级用户的任何其他条件)。我的意思是不是一次又一次地在不同的地方使用这个(如果电子邮件是相同的......)条件。我只想将此超级管理员条件设置一次(在服务提供商中),然后在需要时进行检查。类似的东西:

\Gate::isIntercepted

1 个答案:

答案 0 :(得分:2)

您可以返回授权响应,而不是简单地返回true

public function before($user, $ability)
{
    if ($user->email == 'super@mail.com') {
        return $this->allow('superadmin');
    }
}

如果您使用authorize

,稍后您会收到回复
public function update(Post $post)
{
    $response = $this->authorize($post);

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