РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
723 of 1392 menu

Функция can

Функция can применяется для проверки авторизации текущего пользователя на выполнение определённого действия. Она доступна в Blade-шаблонах и в коде PHP через фасад Gate или вспомогательную функцию. Первым параметром передаётся имя разрешения, вторым - модель или массив моделей, над которыми проверяется право.

Синтаксис

@can('permission', $model) Контент доступен @endcan

Альтернативный синтаксис:

<?php if (Auth::user()->can('permission', $model)) { // Действие разрешено } ?>

Пример в Blade-шаблоне

Проверим, может ли текущий пользователь редактировать статью:

@can('update', $article) <a href="{{ route('articles.edit', $article) }}">Редактировать</a> @endcan

Пример в контроллере

Проверим право на создание статьи:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Support\Facades\Auth; class ArticleController extends Controller { public function create() { if (Auth::user()->can('create', Article::class)) { return view('articles.create'); } return redirect()->route('articles.index') ->with('error', 'No permission'); } } ?>

Результат выполнения кода при наличии права:

"View returned successfully"

Результат выполнения кода при отсутствии права:

"Redirected to articles.index"

Пример с несколькими моделями

Проверим право на удаление нескольких статей:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Support\Facades\Auth; class ArticleController extends Controller { public function deleteMany() { $articles = Article::where('status', 'draft')->get(); if (Auth::user()->can('delete', $articles)) { // Удаление статей } } } ?>

Пример с фасадом Gate

Используем фасад Gate для проверки права:

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Support\Facades\Gate; class ArticleController extends Controller { public function show(Article $article) { if (Gate::allows('view', $article)) { return view('articles.show', ['article' => $article]); } return redirect()->route('articles.index'); } } ?>

Пример с вспомогательной функцией

Используем глобальную функцию can:

<?php namespace App\Http\Controllers; use App\Models\Article; class ArticleController extends Controller { public function update(Article $article) { if (can('update', $article)) { // Обновление статьи } } } ?>

Смотрите также

  • метод user,
    который возвращает текущего аутентифицированного пользователя
  • метод allows,
    который проверяет наличие права через фасад Gate
  • метод cannot,
    который проверяет отсутствие права у пользователя
  • метод denies,
    который проверяет отсутствие права через фасад Gate
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить