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

Метод view

Метод view класса Policy отвечает за проверку права пользователя на просмотр конкретной модели. Этот метод автоматически вызывается при использовании помощника can или директивы @can с моделью в качестве второго аргумента. Первым параметром метод принимает текущего аутентифицированного пользователя, вторым - экземпляр модели, которую пользователь хочет просмотреть.

Синтаксис

<?php namespace AppPolicies; use AppModelsUser; use AppModelsArticle; class ArticlePolicy { public function view(User $user, Article $article) { // logic } } ?>

Пример

Рассмотрим простой пример политики для модели Article, где пользователь может просматривать только свои собственные статьи:

<?php namespace AppPolicies; use AppModelsUser; use AppModelsArticle; class ArticlePolicy { public function view(User $user, Article $article) { return $user->id === $article->user_id; } } ?>

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

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function show(Request $request, $id) { $article = Article::findOrFail($id); if ($request->user()->cannot('view', $article)) { abort(403, 'You cannot view this article.'); } return view('articles.show', ['article' => $article]); } } ?>

Альтернативный способ с использованием метода authorize:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function show(Request $request, $id) { $article = Article::findOrFail($id); $this->authorize('view', $article); return view('articles.show', ['article' => $article]); } } ?>

Пример

Метод view может также использоваться для проверки статуса модели:

<?php namespace AppPolicies; use AppModelsUser; use AppModelsArticle; class ArticlePolicy { public function view(User $user, Article $article) { return $article->status === 'published' || $user->id === $article->user_id; } } ?>

Это позволяет разрешать просмотр опубликованных статей всем пользователям, а неопубликованных - только их авторам.

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function show(Request $request, $id) { $article = Article::findOrFail($id); if ($request->user()->can('view', $article)) { return view('articles.show', ['article' => $article]); } return redirect()->route('home'); } } ?>

Пример

Использование метода view в Blade-шаблоне с директивой @can:

@foreach ($articles as $article) <div> <h3>{{ $article->title }}</h3> <p>{{ $article->excerpt }}</p> @can('view', $article) <a href="{{ route('articles.show', $article) }}">Read more</a> @endcan </div> @endforeach

Также можно использовать директиву @cannot для обратной проверки:

<h1>{{ $article->title }}</h1> <p>{{ $article->content }}</p> @cannot('view', $article) <p>You do not have permission to view this article.</p> @endcannot @can('view', $article) <p>This is the full content of the article.</p> @endcan

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

<h1>My Article Title</h1> <p>This is the full content of the article.</p>

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

<h1>Draft Article</h1> <p>You do not have permission to view this article.</p>

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

  • метод viewAny,
    который проверяет право на просмотр списка моделей
  • метод create,
    который проверяет право на создание новой модели
  • метод update,
    который проверяет право на обновление модели
  • метод delete,
    который проверяет право на удаление модели
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить