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

LaravelのPolicyクラス完全入門!初心者でもわかるアクセス制御の基本

LaravelでPolicyクラスを使ってアクセス制御する方法
LaravelでPolicyクラスを使ってアクセス制御する方法

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

生徒

「Laravelでログインはできたんですが、人によって見せていい画面とダメな画面を分けたいです」

先生

「それなら、LaravelのPolicyクラスを使うと整理して管理できます」

生徒

「Policyって何ですか?難しそうに聞こえます…」

先生

「ルールブックのようなものです。誰が何をしてよいかを、まとめて書ける仕組みですよ」

1. Policyクラスとは?

1. Policyクラスとは?
1. Policyクラスとは?

LaravelのPolicyクラスとは、「この人はこの操作をしてもよいか?」という判断をまとめて書くための仕組みです。これを認可と呼びます。認可とは、ログインしている人が行動してよいかどうかを決めることです。

たとえば、学校をイメージしてください。先生は成績表を編集できますが、生徒は見るだけです。この「誰が何をできるか」という決まりを、LaravelではPolicyクラスに書きます。

2. 認証と認可の違いを知ろう

2. 認証と認可の違いを知ろう
2. 認証と認可の違いを知ろう

Laravelの学習では、認証認可の違いを理解することがとても大切です。

  • 認証:あなたは誰ですか?(ログインしているか)
  • 認可:あなたは何をしていいですか?

Policyクラスは、このうち認可を担当します。ログイン後の行動を安全に制御するために使われます。

3. Policyクラスを作成する流れ

3. Policyクラスを作成する流れ
3. Policyクラスを作成する流れ

Policyクラスは、Laravelのコマンドを使って簡単に作成できます。ここでは「投稿(Post)」を編集できるかどうかを判断する例で説明します。


php artisan make:policy PostPolicy --model=Post

このコマンドを実行すると、app/PoliciesフォルダにPolicyクラスが作成されます。Policyは「このモデルに対するルールを書く場所」と覚えてください。

4. Policyクラスの中身を見てみよう

4. Policyクラスの中身を見てみよう
4. Policyクラスの中身を見てみよう

作成されたPolicyクラスには、いくつかのメソッドがあります。ここでは、編集できるかどうかを判断するupdateメソッドを使います。


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

これは「ログインしている人のID」と「投稿を作った人のID」が同じなら、編集してよい、という意味です。つまり自分が作った投稿だけ編集できるというルールになります。

5. コントローラでPolicyを使う方法

5. コントローラでPolicyを使う方法
5. コントローラでPolicyを使う方法

次に、このPolicyを実際の処理で使います。コントローラでauthorizeメソッドを呼び出します。


public function edit(Post $post)
{
    $this->authorize('update', $post);
    return view('posts.edit', compact('post'));
}

この1行がとても重要です。もし編集してはいけない人がアクセスすると、Laravelが自動でエラーを出して処理を止めてくれます。

6. BladeテンプレートでのPolicy利用

6. BladeテンプレートでのPolicy利用
6. BladeテンプレートでのPolicy利用

画面側でもPolicyを使って、「編集ボタンを表示するかどうか」を制御できます。


@can('update', $post)
<a href="/posts/{{ $post->id }}/edit">編集</a>
@endcan

これにより、権限がない人には最初からボタンが表示されません。ユーザーにとっても分かりやすく、安全な画面になります。

7. Policyを使うメリット

7. Policyを使うメリット
7. Policyを使うメリット

Policyクラスを使うと、アクセス制御のルールを1か所にまとめられます。if文をあちこちに書かなくて済むため、コードが読みやすくなり、間違いも減ります。

また、Laravel標準の仕組みなので、将来機能が増えても管理しやすいのが特徴です。初心者のうちからPolicyに慣れておくと、実務でも役立ちます。

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.2
Java&Spring記事人気No2
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.3
Java&Spring記事人気No3
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.4
Java&Spring記事人気No4
Laravel
Laravelのresponse()関数の使い方を完全ガイド!初心者でもわかるレスポンス制御とHTTPレスポンスの基本
No.5
Java&Spring記事人気No5
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.6
Java&Spring記事人気No6
Laravel
LaravelでRemember Me(ログイン状態保持)機能を実装する方法を完全解説!初心者でも安心の認証入門
No.7
Java&Spring記事人気No7
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.8
Java&Spring記事人気No8
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方