Laravelでモデルのポリシーを作成する方法


モデルのポリシーを作成するには、以下の手順を実行します:

  1. ポリシーの作成 php artisan make:policyコマンドを使用して、ポリシークラスを作成します。以下のコマンドをターミナルで実行します:

    php artisan make:policy PostPolicy --model=Post

    このコマンドは、Postモデルに関連付けられたPostPolicyクラスを生成します。

  2. ポリシーメソッドの定義 生成されたポリシーファイル(PostPolicy.php)内で、各アクションに対してポリシーメソッドを定義します。たとえば、viewメソッドを追加すると、ユーザーが特定の投稿を表示できるかどうかを制御できます。

    public function view(User $user, Post $post)
    {
       // 認可ロジックを実装する
       return $user->id === $post->user_id;
    }

    この例では、$userはログインしているユーザーオブジェクトを表し、$postは表示しようとしている投稿オブジェクトを表します。戻り値としてtrueを返すと、ユーザーによる表示が許可されます。

  3. ポリシーの登録 作成したポリシーを利用するために、AuthServiceProviderクラスにポリシーを登録する必要があります。AuthServiceProviderクラスはapp/Providersディレクトリにあります。

    AuthServiceProviderクラスの$policiesプロパティに、モデルとポリシーのマッピングを追加します。例えば、PostモデルとPostPolicyを関連付けるには、以下のように$policiesプロパティを変更します:

    protected $policies = [
       Post::class => PostPolicy::class,
    ];

    これにより、LaravelはPostモデルに対してPostPolicyを使用するようになります。

以上の手順を実行することで、モデルのポリシーを作成し、認可ロジックを実装することができます。ポリシーを使用すると、特定のユーザーに対してアクションの許可または拒否を柔軟に制御できます。