Метод any
Метод any класса Gate проверяет, имеет ли текущий пользователь право на выполнение хотя бы одного действия из переданного массива. В отличие от метода check, который требует выполнения всех условий, any возвращает true, если хотя бы одна способность разрешена. Метод принимает первым параметром массив имён способностей, вторым - необязательный аргумент для передачи в колбэки.
Синтаксис
<?php
use Illuminate\Support\Facades\Gate;
$res = Gate::any($abilities, $arguments);
?>
Пример
Давайте проверим, может ли пользователь редактировать или удалять статью:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function edit(Request $request, Article $article)
{
$res = Gate::any(['update', 'delete'], $article);
if ($res) {
echo "User has at least one permission";
} else {
echo "User has no permissions";
}
}
}
?>
Результат выполнения кода для пользователя с правом 'update':
"User has at least one permission"
Пример
Давайте используем метод any для проверки нескольких способностей без дополнительных аргументов:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Gate;
class UserController extends Controller
{
public function dashboard()
{
$res = Gate::any(['manage-users', 'view-reports', 'edit-settings']);
if ($res) {
echo "User has access to dashboard";
} else {
echo "Access denied";
}
}
}
?>
Результат выполнения кода, если у пользователя есть право 'view-reports':
"User has access to dashboard"
Пример
Давайте передадим несколько аргументов в метод any для проверки прав на разные модели:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use App\Models\Comment;
use Illuminate\Support\Facades\Gate;
class PostController extends Controller
{
public function moderate()
{
$article = Article::find(1);
$comment = Comment::find(1);
$res = Gate::any(['update-article', 'delete-comment'], [$article, $comment]);
if ($res) {
echo "User can moderate content";
} else {
echo "User cannot moderate";
}
}
}
?>
Результат выполнения кода для пользователя с правом 'delete-comment':
"User can moderate content"