Метод canAny
Метод canAny класса User предназначен для проверки наличия у пользователя хотя бы одного разрешения из переданного списка. Метод принимает первым параметром массив строк с названиями разрешений или непосредственно перечисление разрешений через запятую. Вторым необязательным параметром можно передать модель, к которой применяется разрешение. Метод возвращает булево значение true, если пользователь имеет хотя бы одно из перечисленных прав, и false в противном случае.
Синтаксис
<?php
use AppModelsUser;
// Проверка на наличие хотя бы одного права
$user->canAny($abilities, $arguments = []);
?>
Пример
Проверим, имеет ли пользователь право на создание или редактирование статьи:
<?php
namespace AppHttpControllers;
use AppModelsUser;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function create(Request $request)
{
$user = $request->user();
if ($user->canAny(['create-article', 'edit-article'])) {
return "User has create or edit permission";
}
return "User does not have required permissions";
}
}
?>
Результат выполнения кода:
"User has create or edit permission"
Пример
Проверим наличие прав на редактирование или удаление конкретной статьи:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use AppModelsUser;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function update(Request $request, int $id)
{
$user = $request->user();
$article = Article::findOrFail($id);
if ($user->canAny(['update', 'delete'], $article)) {
return "User can update or delete this article";
}
return "User cannot update or delete this article";
}
}
?>
Результат выполнения кода:
"User can update or delete this article"
Пример
Используем метод с несколькими правами из политик:
<?php
namespace AppHttpControllers;
use AppModelsPost;
use AppModelsUser;
use IlluminateHttpRequest;
class PostController extends Controller
{
public function manage(Request $request, int $id)
{
$user = $request->user();
$post = Post::findOrFail($id);
$permissions = ['view', 'update', 'delete'];
if ($user->canAny($permissions, $post)) {
return "User has at least one permission for this post";
}
return "User has no permissions for this post";
}
}
?>
Результат выполнения кода:
"User has at least one permission for this post"
Пример
Используем метод в Blade-шаблоне для условного отображения контента:
@auth
@if (auth()->user()->canAny(['manage-users', 'edit-users']))
<div class="admin-panel">
<h3>Admin Panel</h3>
<p>You have admin or editor permissions</p>
</div>
@else
<div class="user-panel">
<h3>User Panel</h3>
<p>You have regular user permissions</p>
</div>
@endif
@endauth