Директиви авторизації 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 відповідають дозволам користувачів, створюючи безпечні та інтуїтивно зрозумілі інтерфейси, зменшуючи ризик несанкціонованого доступу до функціоналу
Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше
Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом
Чи стикалися ви з помилкою «SQLSTATE[HY000] [2002] Connection refused» під час налаштування GitHub Actions для вашого додатку на Laravel? У нашій статті ми розглянемо три поширені причини цієї помилки та надамо рішення для їх усунення. Читайте далі, щоб дізнатися, як ваш CI/CD потік може працювати бездоганно!