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

Middleware can

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

Синтаксис

<?php Route::middleware('can:ability,model')->group(function () { // маршруты, требующие проверки прав }); Route::can('ability', 'model')->group(function () { // маршруты, требующие проверки прав }); ?>

Пример

Давайте ограничим доступ к редактированию статьи, используя middleware can:

<?php use AppModelsArticle; Route::middleware('can:update,article')->group(function () { Route::get('/article/{article}/edit', [ArticleController::class, 'edit']); Route::put('/article/{article}', [ArticleController::class, 'update']); }); ?>

Пример

Рассмотрим использование middleware can с методом can роутера:

<?php use AppModelsArticle; Route::can('delete', 'article')->group(function () { Route::delete('/article/{article}', [ArticleController::class, 'destroy']); }); ?>

Пример

Давайте используем middleware can с несколькими моделями:

<?php use AppModelsArticle; use AppModelsComment; Route::middleware('can:update,article,comment')->group(function () { Route::post('/comment/{comment}/update-article/{article}', [CommentController::class, 'updateArticle'] ); }); ?>

Пример

Давайте обработаем случай, когда пользователь не имеет прав доступа:

<?php namespace AppHttpControllers; use AppModelsArticle; use IlluminateHttpRequest; class ArticleController extends Controller { public function edit(Article $article) { // Этот метод будет вызван только если // пользователь имеет право 'update' на статью return view('articles.edit', ['article' => $article]); } } ?>

Пример

Давайте определим политику для проверки прав доступа:

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

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

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