РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
743 of 1392 menu

Метод after

Метод after класса Gate позволяет зарегистрировать глобальный callback, который будет выполняться после всех проверок прав доступа. Этот callback получает результат основной проверки и может переопределить его. Первым параметром передается имя пользователя или null для гостя, вторым - имя способности, третьим - массив параметров, четвертым - результат основной проверки. Callback должен возвращать true или false.

Синтаксис

<?php use Illuminate\Support\Facades\Gate; Gate::after(function ($user, $ability, $params, $result) { return $result; }); ?>

Пример

Давайте зарегистрируем глобальный callback, который позволяет администратору выполнять любые действия:

<?php namespace App\Providers; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { public function boot() { Gate::after(function ($user, $ability, $params, $result) { if ($user && $user->is_admin) { return true; } return $result; }); } } ?>

Пример

Теперь проверим права доступа для обычного пользователя и администратора:

<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Gate; use App\Models\User; class UserController extends Controller { public function checkAccess() { $regularUser = User::where('email', 'user@example.com')->first(); $adminUser = User::where('email', 'admin@example.com')->first(); $resRegular = Gate::forUser($regularUser)->allows('edit-settings'); $resAdmin = Gate::forUser($adminUser)->allows('edit-settings'); echo $resRegular ? 'true' : 'false'; echo PHP_EOL; echo $resAdmin ? 'true' : 'false'; } } ?>

Результат выполнения кода:

"false" "true"

Пример

Если основной проверки не существует, метод after все равно будет вызван. В таком случае параметр result будет равен null:

<?php namespace App\Providers; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { public function boot() { Gate::after(function ($user, $ability, $params, $result) { if ($result === null) { return false; } return $result; }); } } ?>

Пример

Метод after может использоваться для логирования всех проверок прав доступа:

<?php namespace App\Providers; use Illuminate\Support\Facades\Gate; use Illuminate\Support\Facades\Log; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { public function boot() { Gate::after(function ($user, $ability, $params, $result) { $userId = $user ? $user->id : 'guest'; Log::info("User {$userId} checked ability '{$ability}' with result " . ($result ? 'true' : 'false')); return $result; }); } } ?>

Смотрите также

  • метод before,
    который регистрирует callback до всех проверок
  • метод define,
    который определяет новую способность
  • метод allows,
    который проверяет, разрешено ли действие
  • метод denies,
    который проверяет, запрещено ли действие
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить