LaravelのForm validationのauthorizeメソッドを使ってみる

執筆日: 更新日:

概要

LaravelでFormを扱うとき、FormValidationを使うことが多いですよね?(app/Requests/xxxRequext.php)
汎用的なRequestではなく、それぞれのFormにあったデータをバリデーションするために作成すると思います。

このとき自動生成されるauthorizeメソッドをとりあえずtrueにして使っていませんか?

public function authorize(): bool
{
    return true;        // 何も考えずにtrueにする
}

せっかくなのでここを使ってみましょう

authorizeメソッドの意味

ここは、特定のアクセス以外を弾くときに使ったります。
例えば、ログイン済みユーザ以外はリクエストできなくするなど。
まあRouterでこの程度はやっていると思いますが、ログインしていても「特別な会員のみリクエストできる」などにも使えますね。

特定のアクセスのみ受け付けるようにする

いちばん簡単な「ログインしているユーザのみリクエストできる」を実装してみます。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
use Illuminate\Validation\Rule;

class HogeFugaRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     */
    public function authorize(): bool
    {
        $user = Auth::user();
        if ($user !== null) {
                return true;
        }
				
        return false;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array<string, \Illuminate\Contracts\Validation\ValidationRule|array<mixed>|string>
     */
    public function rules(): array
    {
        return [
        ];
    }
}

このようにすることで、ログインしているユーザはこのフォームでリクエストできますが、
ログインしていないユーザには403が返ります。

[PR] おすすめの本
この記事を書いた人
Nな人(えぬなひと)。
Nは本名から取っています。
Laravelが大好きなPHPerで、WEBを作るときはLaravelを技術スタックに絶対推すマン。
PHP、Pythonと、昔はperlを書いていたP言語エンジニア。
最近はNimを書いたりしています。