Laravel Bouncerを使用してアビリティを追加する方法


  1. Bouncerのインストールと設定 LaravelプロジェクトにBouncerをインストールするには、まずComposerを使用してパッケージをインストールします。

    composer require silber/bouncer

    インストールが完了したら、config/app.phpファイルでBouncerサービスプロバイダを有効にします。

    'providers' => [
       // ...
       Silber\Bouncer\BouncerServiceProvider::class,
    ],

    また、Bouncerが使用するデータベーステーブルをマイグレーションする必要があります。

    php artisan bouncer:migrate
  2. アビリティの定義 アビリティは、ユーザーが特定のアクションを実行できるかどうかを制御するためのルールです。例えば、ブログの管理者は記事の作成、編集、削除などのアクションを実行できるでしょう。

    Bouncerでは、アビリティを定義するために「ゲート」と呼ばれるものを使用します。アビリティの定義は、AuthServiceProviderクラスのbootメソッド内で行います。

    use Illuminate\Support\Facades\Gate;
    use Silber\Bouncer\Bouncer;
    public function boot(Bouncer $bouncer)
    {
       $bouncer->define('create-post', function ($user) {
           // ユーザーが記事を作成できるかどうかのロジックを定義する
           return $user->isAdmin(); // 例えば、管理者のみが記事を作成できる場合
       });
       // 他のアビリティの定義も同様に追加する
    }

    上記の例では、「create-post」というアビリティを定義しています。このアビリティは、$user->isAdmin()trueを返す場合にのみ有効です。

  3. アビリティの割り当て 定義したアビリティをユーザーに割り当てるには、Bouncerファサードを使用します。

    use Illuminate\Support\Facades\Bouncer;
    // ユーザーにアビリティを割り当てる
    Bouncer::allow($user)->to('create-post');

    上記の例では、$userに「create-post」アビリティを割り当てています。

  4. アビリティのチェック アビリティをチェックするには、Bouncerファサードのcanメソッドを使用します。

    use Illuminate\Support\Facades\Bouncer;
    if (Bouncer::can('create-post')) {
       // 記事の作成処理
    } else {
       // アクセスが拒否された場合の処理
    }

    上記の例では、「create-post」アビリティを持っている場合にのみ、記事の作成処理が実行されます。