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

Метод can

Метод can применяется к экземпляру модели пользователя и позволяет проверить, имеет ли пользователь разрешение на выполнение указанного действия. Первым параметром передаётся имя способности, вторым - модель или массив с параметрами. Метод возвращает логическое значение true или false.

Синтаксис

<?php $user->can($ability, $arguments); ?>

Пример

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

<?php use AppModelsUser; use AppModelsArticle; use IlluminateSupportFacadesAuth; $user = User::find(1); $res = $user->can('create', Article::class); var_dump($res); ?>

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

true

Пример

Давайте проверим, может ли пользователь обновлять конкретную статью:

<?php use AppModelsUser; use AppModelsArticle; $user = User::find(1); $article = Article::find(1); $res = $user->can('update', $article); var_dump($res); ?>

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

false

Пример

Давайте проверим право на удаление статьи с использованием массива параметров:

<?php use AppModelsUser; use AppModelsArticle; $user = User::find(1); $article = Article::find(1); $res = $user->can('delete', [$article, 'force' => true]); var_dump($res); ?>

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

false

Пример

Давайте проверим право на просмотр списка статей с помощью метода в контроллере:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateSupportFacadesAuth; class ArticleController extends Controller { public function index() { if (Auth::user()->can('viewAny', Article::class)) { $articles = Article::all(); return view('articles.index', ['articles' => $articles]); } abort(403, 'You do not have permission to view articles.'); } } ?>

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

"Return view with articles collection"

Пример

Давайте используем метод can непосредственно в Blade-шаблоне для отображения кнопки редактирования:

<h1>{{ $article->title }}</h1> <p>{{ $article->content }}</p> @if(Auth::user()->can('update', $article)) <a href="{{ route('articles.edit', $article) }}">Edit</a> @endif

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

<h1>Article Title</h1> <p>Article content goes here</p> <a href="/articles/1/edit">Edit</a>

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

<h1>Article Title</h1> <p>Article content goes here</p>

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

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