Директиви авторизації Blade у Laravel чудово інтегруються з системою дозволів вашого застосунку, забезпечуючи чисте умовне рендерингування на основі можливостей користувача. Ці директиви підтримують узгодженість між авторизацією на бекенді та логікою відображення на фронтенді.
Blade пропонує три основні директиви авторизації для перевірки дозволів:
@can('edit', $article)
<button class="edit-btn">Редагувати статтю</button>
@endcan
@cannot('delete', $article)
<span class="text-muted">Видалення заборонено</span>
@endcannot
Директива @canany
перевіряє кілька дозволів одночасно, що корисно в складних сценаріях авторизації.
@canany(['publish', 'schedule'], $article)
<div class="publishing-controls">
Доступні параметри публікації
</div>
@endcanany
Ось приклад реалізації панелі управління, що демонструє різні шаблони авторизації:
<div class="dashboard-layout">
<header class="dashboard-header">
<h1>Управління контентом</h1>
@canany(['create-posts', 'create-pages'])
<div class="create-actions">
@can('create-posts')
<a href="{{ route('posts.create') }}" class="btn btn-primary">Нова стаття</a>
@endcan
@can('create-pages')
<a href="{{ route('pages.create') }}" class="btn btn-secondary">Нова сторінка</a>
@endcan
</div>
@endcanany
</header>
<main class="content-area">
@foreach($articles as $article)
<article class="content-card">
<h2>{{ $article->title }}</h2>
<p>{{ $article->excerpt }}</p>
<div class="article-meta">
<span>Автор: {{ $article->author->name }}</span>
<span>{{ $article->published_at->diffForHumans() }}</span>
</div>
<div class="article-actions">
@can('update', $article)
<a href="{{ route('articles.edit', $article) }}" class="action-link">
Редагувати
</a>
@endcan
@can('publish', $article)
@if($article->is_draft)
<form method="POST" action="{{ route('articles.publish', $article) }}" class="inline-form">
@csrf
<button type="submit" class="publish-btn">Опублікувати</button>
</form>
@endif
@endcan
@cannot('delete', $article)
<span class="disabled-action">Видалення (захищено)</span>
@else
<form method="POST" action="{{ route('articles.destroy', $article) }}" class="inline-form">
@csrf
@method('DELETE')
<button type="submit" class="delete-btn" onclick="return confirm('Видалити цю статтю?')">
Видалити
</button>
</form>
@endcannot
</div>
</article>
@endforeach
</main>
<aside class="sidebar">
@canany(['view-analytics', 'manage-users', 'system-settings'])
<div class="admin-panel">
<h3>Адміністрування</h3>
<ul class="admin-links">
@can('view-analytics')
<li><a href="{{ route('analytics.dashboard') }}">Аналітика</a></li>
@endcan
@can('manage-users')
<li><a href="{{ route('users.index') }}">Керування користувачами</a></li>
@endcan
@can('system-settings')
<li><a href="{{ route('settings.index') }}">Системні налаштування</a></li>
@endcan
</ul>
</div>
@endcanany
@guest
<div class="login-prompt">
<p>Будь ласка, <a href="{{ route('login') }}">увійдіть</a>, щоб отримати доступ до всіх функцій.</p>
</div>
@else
@cannot('create-posts')
<div class="upgrade-notice">
<p>Підвищте свій тарифний план, щоб створювати публікації.</p>
<a href="{{ route('plans.index') }}" class="upgrade-link">Переглянути плани</a>
</div>
@endcannot
@endguest
</aside>
</div>
Директиви авторизації гарантують, що елементи UI відповідають дозволам користувачів, створюючи безпечні та інтуїтивно зрозумілі інтерфейси, зменшуючи ризик несанкціонованого доступу до функціоналу