カテゴリ: 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
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
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.7
Java&Spring記事人気No7
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
No.8
Java&Spring記事人気No8
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方