Политика не вызывается при использовании Gate's before () - PullRequest
0 голосов
/ 23 апреля 2019

Я создал политику с именем ProjectPolicy с одной функцией:

public function update(User $user, Project $project)
{
    return $project->owner_id == $user->id;
}

Я зарегистрировал свою политику в моем AuthServiceProvider как:

protected $policies = [
    'App\Project' => 'App\Policies\ProjectPolicy'
]

Также в AuthServiceProvider у меня есть это:

public function boot(Gate $gate)
{
    $this->registerPolicies();

    $gate->before(function ($user) {
        return $user->isAdmin();
    });
}

Предполагается, что политика не применяется, если пользователь является администратором. Но когда я делаю это, он полностью лишает доступа пользователей, не являющихся администраторами. Почему?

1 Ответ

0 голосов
/ 23 апреля 2019

Чтобы исправить это, метод boot должен быть обновлен как:

public function boot(Gate $gate)
{
    $this->registerPolicies();

    $gate->before(function ($user) {
        return $user->isAdmin() ? true : null;
    });
}

Из https://laravel.com/docs/5.8/authorization#intercepting-gate-checks:

Если обратный вызов before возвращает ненулевой результат, этот результат будет считается результатом проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...