Laravelパーミッション

更新日 2025-06-03 19:32:40
laravel

laravelパーミッションによる権限設定方法


インストール

composer require spatie/laravel-permission

設定ファイルとマイグレーションの公開

Spatieパーミッションパッケージが用意している設定ファイルやマイグレーションファイルを、Laravelアプリの中にコピーする
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"


マイグレーション

マイグレーションでパーミッション関連テーブルを作成
php artisan migrate


ユーザーモデルにロールのトレイトを追加する

app/User.php
namespace App;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles; // 追加

class User extends Authenticatable
{
use Notifiable;
use HasRoles; // 追加




ロールの作成

roleのseederを作成する
php artisan make:seeder RoleTableSeeder


database/seeds/RoleTableSeeder.php
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;

class RoleTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
Role::create(['name' => 'admin']);
}
}




ユーザーにロールを紐づける

userのseederを作成する
php artisan make:seeder UserSeeder


database/seeds/UserSeeder.php

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use App\User;

class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$user = User::find(1);
$user->assignRole('admin');
}
}



ミドルウェアの設定

app/Http/Kernel.php
protected $routeMiddleware = [
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
];



ルートにロールの制御をかける

Route::group(['middleware' => ['role:admin']], function() {
// 処理
});