0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelにて認証許可をするためにPolicyを使ってみる

0
Last updated at Posted at 2026-08-24

Laravelにてアプリ開発を行う際、特定の人にしか操作させたくないページがあるとおもいます。

(ブログフォーマットの開発であれば、管理者以外はブログ作成画面へ飛ばないようにする場面などです)

基本的にmiddlewareを使えば認証システムはほとんど問題ありません。

api.php
Route::put('/tasks/{id}', [TaskBoardController::class, 'updateTask'])->middleware('auth:sanctum');

ですが時には複雑な条件を付けたい場合などもあるでしょう。

(タスク管理アプリを開発するのであれば、タスクを作成した者以外は閲覧はできるが編集ができないという場合などです)

その場合はLaravelのPolicyを使うと便利です。

Policyの使い方

作成コマンドと命名規則

php artisan make:policy CategoryPolicy --model=Category

後述しますがポリシーファイルの名前によっては、コントローラーで呼び出しをせずとも自動で判別してくれます。

Categoryというmodelに対応させたいのであればCategoryPolicyと命名しましょう。

また、モデルを使用することで雛形を形成してくれます。

Policyファイルのサンプルコード

CategoryPolicy.php
<?php

namespace App\Policies;

use App\Models\Category;
use App\Models\User;

class CategoryPolicy
{
    /**
     * Determine whether the user can view any models.
     */
    public function viewAny(User $user): bool
    {
        return $user->admin === 1;
    }

    // ============ 中略 ==============

}

ポリシーは真偽判定であるため、式を書きます。

今回はUserモデルにadmin(Int)カラムがあることを前提としています。

Controllerでの使い方

<?php

namespace App\Http\Controllers\CMS;

use App\Http\Resources\CategoryResource;
use App\Models\Category;
use Illuminate\Http\Request;
use App\Http\Requests\StoreCategoryRequest;
use App\Http\Controllers\Controller;

class CategoryController extends Controller
{
    /**
     * Store a newly created resource in storage.
     */
    public function store(StoreCategoryRequest $request)
    {
        $this->authorize('create', Category::class);
        $category = Category::create([
            'category_name' => $request->name, 
            'project_id' => $request->project_id
            ]);
        return new CategoryResource($category);
    }

$this->authorize($a, $b)では、
$a = アビリティ(権限) $b = 引数(呼び出しもとから渡されたもの)という使い方をします。

簡単にいうと$bは$aをすることができるかということです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?