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

Метод before

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

Синтаксис

<?php Gate::before($callback); ?>

Пример

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

<?php namespace AppProviders; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { public function boot(): void { Gate::before(function ($user, $ability) { if ($user->role === 'admin') { return true; } return null; }); } } ?>

Пример

Теперь проверим доступ для администратора к любому действию:

<?php use Illuminate\Support\Facades\Gate; use App\Models\User; Route::get('/admin/panel', function () { $user = User::find(1); if (Gate::forUser($user)->allows('edit-posts')) { echo "Access granted to edit posts"; } if (Gate::forUser($user)->allows('delete-users')) { echo "Access granted to delete users"; } }); ?>

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

"Access granted to edit postsAccess granted to delete users"

Пример

Метод before может использоваться для блокировки доступа для забаненных пользователей:

<?php namespace AppProviders; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { public function boot(): void { Gate::before(function ($user, $ability) { if ($user->is_banned) { return false; } return null; }); Gate::define('edit-posts', function ($user) { return $user->role === 'editor'; }); } } ?>

Пример

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

<?php use Illuminate\Support\Facades\Gate; use App\Models\User; Route::get('/check-access', function () { $user = User::find(2); if (Gate::forUser($user)->denies('edit-posts')) { echo "Access denied"; } }); ?>

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

"Access denied"

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

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