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

Laravelのロールベース認可を完全入門!Spatie/laravel-permissionで安全な権限制御

Laravelでロールベース認可を実装する方法(Spatie/laravel-permission)
Laravelでロールベース認可を実装する方法(Spatie/laravel-permission)

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

生徒

「Laravelで管理者と一般ユーザーを分けたいんですが、どうすればいいですか?」

先生

「その場合は、ロールベース認可を使うと分かりやすいですよ」

生徒

「ロールって何ですか?難しそうです…」

先生

「役割のことです。Spatie/laravel-permissionを使えば簡単に実装できます」

1. ロールベース認可とは?

1. ロールベース認可とは?
1. ロールベース認可とは?

ロールベース認可とは、ユーザーに「役割(ロール)」を割り当てて、その役割ごとにできる操作を制限する考え方です。たとえば、学校で言えば「先生」「生徒」「事務員」といった立場によって、使える部屋やできる作業が違うのと同じです。

Laravelの認証と認可では、この考え方を使うことで、管理画面を管理者だけに表示したり、特定の操作を限られた人だけに許可したりできます。

2. Spatie/laravel-permissionとは?

2. Spatie/laravel-permissionとは?
2. Spatie/laravel-permissionとは?

Spatie/laravel-permissionは、Laravelでロールと権限を簡単に扱うための有名なパッケージです。パッケージとは、便利な機能をまとめた部品セットのようなものです。

このパッケージを使うと、「管理者ロール」「編集者ロール」などを作り、それぞれに「投稿を編集できる」「削除できる」といった権限を持たせることができます。

3. パッケージをインストールする

3. パッケージをインストールする
3. パッケージをインストールする

まずはSpatie/laravel-permissionをプロジェクトに追加します。コマンドはコピーしてそのまま使えます。


composer require spatie/laravel-permission

composerとは、Laravelで部品を管理する仕組みです。インストールが終わると、ロールと権限を扱う準備が整います。

4. 設定ファイルとテーブルを準備する

4. 設定ファイルとテーブルを準備する
4. 設定ファイルとテーブルを準備する

次に設定ファイルとデータベース用のテーブルを用意します。これにより、ロールや権限の情報を保存できるようになります。


php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

php artisan migrate

これでrolesやpermissionsといったテーブルが作成されます。データベースは、情報をしまっておく箱のようなものです。

5. Userモデルに設定を追加する

5. Userモデルに設定を追加する
5. Userモデルに設定を追加する

次に、ユーザーがロールを持てるようにします。UserモデルにTraitを追加するだけで使えるようになります。


use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}

Traitとは、便利な機能をまとめて取り込める仕組みです。これでUserはロールや権限を扱えるようになります。

6. ロールと権限を作成する

6. ロールと権限を作成する
6. ロールと権限を作成する

ロールと権限は、管理者用、一般ユーザー用など、目的に応じて作成します。


use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

$adminRole = Role::create(['name' => 'admin']);
$userRole = Role::create(['name' => 'user']);

Permission::create(['name' => 'edit post']);
Permission::create(['name' => 'delete post']);

ロールは役割、権限はできる行動と考えると分かりやすいです。

7. ロールと権限をユーザーに割り当てる

7. ロールと権限をユーザーに割り当てる
7. ロールと権限をユーザーに割り当てる

作成したロールは、ユーザーに割り当てて使います。


$user->assignRole('admin');

これで、そのユーザーは管理者として扱われます。学校で言えば、名札を付けるようなイメージです。

8. コントローラで認可チェックする

8. コントローラで認可チェックする
8. コントローラで認可チェックする

ロールや権限を使って、処理を制限できます。


if ($user->hasRole('admin')) {
    // 管理者だけの処理
}

hasRoleは「この人は管理者ですか?」と確認する命令です。

9. Bladeテンプレートでの使い方

9. Bladeテンプレートでの使い方
9. Bladeテンプレートでの使い方

画面側でもロールを使って表示を制御できます。


@role('admin')
<a href="/admin">管理画面</a>
@endrole

これにより、管理者以外には管理画面へのリンクが表示されません。

10. ロールベース認可のメリット

10. ロールベース認可のメリット
10. ロールベース認可のメリット

ロールベース認可を使うことで、権限管理が分かりやすくなり、設定ミスも減ります。特に利用者が増えるアプリでは、安全性と管理のしやすさが大きく向上します。

Spatie/laravel-permissionは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のルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方