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

Метод authorize

Метод authorize класса Gate предназначен для проверки авторизации пользователя на выполнение определённого действия. В отличие от методов allows и denies, которые возвращают булево значение, метод authorize выбрасывает исключение AuthorizationException, если пользователь не имеет необходимых прав. Первым параметром передаётся имя действия (ability), вторым - модель или экземпляр, над которым выполняется действие, третьим - дополнительные аргументы.

Синтаксис

<?php use Illuminate\Support\Facades\Gate; Gate::authorize($ability, $arguments = []); ?>

Пример

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

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Support\Facades\Gate; class ArticleController extends Controller { public function update($id) { $article = Article::findOrFail($id); Gate::authorize('update', $article); // Code for updating the article return "Article updated successfully"; } } ?>

Если у пользователя нет прав на обновление, будет выброшено исключение:

"This action is unauthorized."

Пример

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

<?php namespace App\Http\Controllers; use App\Models\Article; use Illuminate\Support\Facades\Gate; class ArticleController extends Controller { public function destroy($id) { $article = Article::findOrFail($id); Gate::authorize('delete', [$article, 'force']); $article->delete(); return "Article deleted successfully"; } } ?>

Результат при успешной авторизации:

"Article deleted successfully"

Пример

Использование метода в контроллере с автоматической обработкой исключения:

<?php namespace App\Http\Controllers; use App\Models\Post; use Illuminate\Support\Facades\Gate; use Illuminate\Auth\Access\AuthorizationException; class PostController extends Controller { public function edit($id) { $post = Post::findOrFail($id); try { Gate::authorize('update', $post); return view('posts.edit', ['post' => $post]); } catch (AuthorizationException $e) { return redirect()->route('posts.index') ->with('error', 'You do not have permission to edit this post.'); } } } ?>

Результат при отсутствии прав:

"Redirect to posts.index with error message"

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

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