laravelパーミッション

更新日 2023-12-13 17:47:59
laravel

インストール


composer require spatie/laravel-permission

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() {
    // 処理
});