カテゴリ: Laravel 更新日: 2026/01/22

Laravelのリソースベース認可を完全入門!authorizeResourceで楽にアクセス制御しよう

Laravelでリソースベースの認可(authorizeResource)を設定する方法
Laravelでリソースベースの認可(authorizeResource)を設定する方法

先生と生徒の会話形式で理解しよう

生徒

「LaravelでPolicyは使えるようになったんですが、毎回authorizeを書くのが大変です」

先生

「それなら、リソースベースの認可であるauthorizeResourceを使うと便利ですよ」

生徒

「authorizeResourceって何をしてくれるんですか?」

先生

「コントローラの処理ごとに、Policyを自動で呼び出してくれる仕組みです」

1. リソースベースの認可とは?

1. リソースベースの認可とは?
1. リソースベースの認可とは?

Laravelのリソースベースの認可とは、投稿や商品などの1つのデータのまとまりを基準にして、アクセス制御を行う方法です。Laravelでは、これを簡単に設定できる仕組みとしてauthorizeResourceが用意されています。

たとえば「投稿を見る」「投稿を作る」「投稿を編集する」といった操作は、すべて投稿という同じ対象に対する行動です。このような場合、毎回認可処理を書くよりも、まとめて自動化したほうが安全で分かりやすくなります。

2. authorizeResourceが必要になる理由

2. authorizeResourceが必要になる理由
2. authorizeResourceが必要になる理由

通常のPolicy利用では、コントローラの中でauthorizeを何度も書く必要があります。処理が増えるほど、書き忘れやミスが起こりやすくなります。

authorizeResourceを使うと、Laravelがどの処理で、どのPolicyメソッドを使うかを自動で判断してくれます。これは、学校で言えば「授業ごとの細かい確認を、時間割表で一括管理する」ようなイメージです。

3. リソースコントローラとの関係

3. リソースコントローラとの関係
3. リソースコントローラとの関係

authorizeResourceは、リソースコントローラと一緒に使います。リソースコントローラとは、一覧表示、作成、編集、削除など、決まった名前のメソッドを持つコントローラです。

Laravelでは、この決まったメソッド名とPolicyのメソッド名が対応しています。そのため、自動で認可処理が行えるようになっています。

4. Policyクラスを準備しよう

4. Policyクラスを準備しよう
4. Policyクラスを準備しよう

まずは、対象となるモデル用のPolicyクラスが必要です。ここでは投稿を例にします。


php artisan make:policy PostPolicy --model=Post

このPolicyクラスには、view、create、update、deleteなどのメソッドが用意されます。これらが、リソースコントローラの各処理と結びつきます。

5. Policyメソッドの基本例

5. Policyメソッドの基本例
5. Policyメソッドの基本例

たとえば、投稿を編集できるかどうかを判断する場合、次のように書きます。


public function update(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

これは「ログインしている人が、その投稿の作成者なら編集できる」という意味です。難しく見えても、比べているだけのシンプルな条件です。

6. authorizeResourceをコントローラに設定する

6. authorizeResourceをコントローラに設定する
6. authorizeResourceをコントローラに設定する

次に、コントローラでauthorizeResourceを設定します。これは、コンストラクタという特別な場所に書きます。


public function __construct()
{
    $this->authorizeResource(Post::class, 'post');
}

これだけで、index、show、create、store、edit、update、destroyといった処理に対して、対応するPolicyメソッドが自動で呼ばれます。

7. 自動で行われる認可の仕組み

7. 自動で行われる認可の仕組み
7. 自動で行われる認可の仕組み

authorizeResourceを設定すると、Laravelは次のように動きます。

  • editメソッド → updateポリシー
  • destroyメソッド → deleteポリシー
  • createメソッド → createポリシー

この対応関係を覚える必要はありません。Laravelが内部で処理してくれるため、開発者はPolicyの中身に集中できます。

8. Bladeテンプレートとの相性

8. Bladeテンプレートとの相性
8. Bladeテンプレートとの相性

authorizeResourceを使っていても、Bladeテンプレートでは@canがそのまま使えます。画面表示と処理の両方で、同じルールが使われるため、ズレが起きにくくなります。


@can('update', $post)
<button>編集</button>
@endcan

これにより、操作できない人にはボタン自体が表示されません。ユーザーにとっても安心できる画面になります。

9. authorizeResourceを使うメリット

9. authorizeResourceを使うメリット
9. authorizeResourceを使うメリット

authorizeResourceの最大のメリットは、書くコードが減り、ミスも減ることです。認可処理を忘れてしまうと、誰でも操作できる危険な画面ができてしまいます。

Laravel標準の仕組みを使うことで、初心者でも安全なアプリケーションを作りやすくなります。特に、投稿管理やユーザー管理などでは大きな効果があります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New2
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New3
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New4
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.2
Java&Spring記事人気No2
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.5
Java&Spring記事人気No5
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)