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

Метод authorize

Метод authorize класса FormRequest предназначен для проверки прав доступа пользователя к выполнению запроса. Он вызывается автоматически перед валидацией данных и возвращает логическое значение true или false. Если метод возвращает false, Laravel генерирует исключение с кодом 403 и прерывает выполнение запроса. Внутри метода можно использовать механизмы авторизации Laravel, например, политики или фасад Gate, чтобы проверить, имеет ли пользователь право на выполнение действия.

Синтаксис

Метод не принимает параметров и должен возвращать bool:

<?php public function authorize(): bool { return true; // Разрешить запрос } ?>

Пример

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

<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class ArticleRequest extends FormRequest { public function authorize(): bool { return $this->user() !== null; } public function rules(): array { return [ 'title' => 'required|string|max:255', 'content' => 'required|string', ]; } } ?>

Пример

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

<?php namespace App\Http\Requests; use App\Models\Article; use Illuminate\Foundation\Http\FormRequest; class UpdateArticleRequest extends FormRequest { public function authorize(): bool { $article = Article::find($this->route('article')); if (!$article) { return false; } return $this->user()->id === $article->user_id; } public function rules(): array { return [ 'title' => 'sometimes|string|max:255', 'content' => 'sometimes|string', ]; } } ?>

Пример

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

<?php namespace App\Http\Requests; use App\Models\Article; use App\Policies\ArticlePolicy; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Support\Facades\Gate; class DeleteArticleRequest extends FormRequest { public function authorize(): bool { $article = Article::find($this->route('article')); if (!$article) { return false; } return Gate::allows('delete', $article); } public function rules(): array { return []; } } ?>

Пример использования в контроллере

Метод вызывается автоматически при передаче запроса в контроллер:

<?php namespace App\Http\Controllers; use App\Http\Requests\ArticleRequest; use App\Models\Article; class ArticleController extends Controller { public function store(ArticleRequest $request) { $validated = $request->validated(); $article = Article::create([ 'title' => $validated['title'], 'content' => $validated['content'], 'user_id' => $request->user()->id, ]); return response()->json($article, 201); } } ?>

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

  • метод rules,
    который определяет правила валидации
  • метод messages,
    который переопределяет сообщения об ошибках
  • метод validated,
    который возвращает проверенные данные
  • метод prepareForValidation,
    который подготавливает данные перед валидацией
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить