Gate::after(): возврат ненулевого значения не изменяет результат авторизации

Согласно официальной документации laravel,

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

Но когда я объявляю после обратного вызова и перезаписываю значение как false, он все равно возвращает предыдущее значение.

Что мне не хватает? Как переопределить значение в Gate::after?

Gate::define('edit-settings', function ($user = null) {
    return true;
});
Gate::after(function ($user = null, $ability = null, $result = null, $arguments = null) {
    return false; //this have no effect
});

// ------------

Gate::allows('edit-settings'); // return true!

2 ответа

потому что ваши ворота 'edit-settings' всегда возвращают логическое значение, поэтому Gate:: after не вызывается.

эта статья может помочь.

  1. Такое поведение может быть, если у вас есть Laravel < 5.7
  2. Вы обрабатываете запрос без авторизации
  3. Gate::after(function ($user = null, $ability = null, $result = null, $arguments = null)- params не должно быть нулевым. Я думаю, это может вызвать эту ошибку
Другие вопросы по тегам