Директива canany
Директива canany в Blade позволяет проверить,
имеет ли текущий пользователь хотя бы одно право
из переданного списка. Первым параметром передаётся
массив имён разрешений, вторым - модель,
к которой применяется проверка.
Если пользователь имеет хотя бы одно из указанных прав,
то содержимое блока будет отображено.
Директива является удобной альтернативой нескольким
вызовам can через ИЛИ.
Синтаксис
@canany(['permission1', 'permission2'], $model)
<p>User has at least one of the permissions.</p>
@endcanany
Пример
Проверим, может ли пользователь редактировать или удалять статью:
@canany(['edit', 'delete'], $article)
<div class="actions">
<a href="{{ route('articles.edit', $article) }}">Edit</a>
<form action="{{ route('articles.destroy', $article) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit">Delete</button>
</form>
</div>
@endcanany
Пример
Используем директиву canany с тремя правами
и покажем разные сообщения в зависимости от результата:
@canany(['manage-users', 'manage-posts', 'manage-settings'])
<div class="admin-panel">
<p>You have administrative privileges.</p>
</div>
@else
<div class="user-panel">
<p>You are a regular user.</p>
</div>
@endcanany
Пример
Проверим права доступа без передачи модели. В этом случае проверяются глобальные разрешения:
@canany(['view-reports', 'export-data'])
<li>
<a href="{{ route('reports.index') }}">Reports</a>
</li>
@endcanany
Пример
Комбинируем директиву canany с другими
директивами для более сложной логики:
@foreach ($posts as $post)
<div class="post">
<h3>{{ $post->title }}</h3>
<p>{{ $post->content }}</p>
@canany(['update', 'delete'], $post)
<div class="post-actions">
@can('update', $post)
<a href="{{ route('posts.edit', $post) }}">Edit</a>
@endcan
@can('delete', $post)
<form action="{{ route('posts.destroy', $post) }}" method="POST" style="display:inline">
@csrf
@method('DELETE')
<button type="submit">Delete</button>
</form>
@endcan
</div>
@endcanany
</div>
@endforeach