laravel-permission を利用したロールベースアクセス制御

概要のみメモ

laravel-permission

https://docs.spatie.be/laravel-permission/v3/introduction/

laravel-permission で利用するテーブル

  • roles
  • permissions
  • model_has_roles
  • model_has_permissions
  • role_has_permissions

https://qiita.com/sh-ogawa/items/09b7097b5721dcdbe566

laravel-permission で出来る事

  • Router

    • middleware追加で、パーミッションのチェックが可能になる
    • $this->router->post(xxx)->name(xxx)->middleware(['permission:パーミッション名']);
  • Controller

    • コントローラ内で、パーミッションチェックが可能になる
    • $guard->user()->can(パーミッション名)
  • Blade

    • パーミッションによる、ボタンなどの表示・非表示などが可能になる
    • @can(パーミッション名) ボタン @endcan

実装例

  • Seeder で下記を行う

    • ロール作成
      • roles テーブルにレコード追加
    • パーミッション作成
      • permissions テーブルにレコード追加
    • 各ロールにパーミッションを付与
      • $role->syncPermissions($permissions)
  • ユーザー作成機能等で、User 作成時に、User にロールを付与

    • $user->assignRole(ロール名);
    • UserEloquent は Spatie\Permission\Traits\HasRoles トレイトを use してるので assignRole() が使える