Метод allows
Метод allows класса Gate применяется для проверки авторизации текущего пользователя на выполнение указанного действия. Первым параметром передаётся имя разрешения (ability), вторым - необязательный аргумент, обычно модель или массив данных, над которым выполняется действие. Метод возвращает true, если действие разрешено, и false в противном случае.
Синтаксис
<?php
use Illuminate\Support\Facades\Gate;
$res = Gate::allows($ability, $arguments);
?>
Пример
Давайте проверим, может ли пользователь обновить статью с id равным 1:
<?php
use Illuminate\Support\Facades\Gate;
use App\Models\Article;
use App\Models\User;
$user = User::find(1);
$article = Article::find(1);
if (Gate::allows('update', $article)) {
echo "User can update article";
} else {
echo "User cannot update article";
}
?>
Результат выполнения кода:
"User can update article"
Пример
Давайте проверим несколько разрешений для одной модели, например, просмотр и удаление:
<?php
use Illuminate\Support\Facades\Gate;
use App\Models\Article;
use App\Models\User;
$user = User::find(1);
$article = Article::find(1);
$canView = Gate::allows('view', $article);
$canDelete = Gate::allows('delete', $article);
if ($canView) {
echo "User can view article";
}
if ($canDelete) {
echo "User can delete article";
}
?>
Результат выполнения кода:
"User can view article"
Пример
Если разрешение не требует модели, можно передать только имя действия:
<?php
use Illuminate\Support\Facades\Gate;
use App\Models\User;
$user = User::find(1);
if (Gate::allows('view-dashboard')) {
echo "User can access dashboard";
} else {
echo "User cannot access dashboard";
}
?>
Результат выполнения кода:
"User can access dashboard"
Пример
Метод allows также работает с массивами аргументов. Например, для проверки прав на создание модели:
<?php
use Illuminate\Support\Facades\Gate;
use App\Models\User;
$user = User::find(1);
if (Gate::allows('create', [Article::class])) {
echo "User can create article";
} else {
echo "User cannot create article";
}
?>
Результат выполнения кода:
"User can create article"