1
1

More than 3 years have passed since last update.

Laravel の Policy ってどんな場合に使うの?

Posted at

特定のリソースに対するユーザーアクションを認可する仕組みだそうです。
例えば、ブログの記事削除は本人にしかできないようにすることが可能になる仕組みのことです。

Policyを使わないで書くと以下のようになり、

public function delete(Article $article)
{
    if (request()->article()->isNot($article->user)) {
        return response([], 403);
    }

    $article->delete();
}

ArticlePolicyを作成すると、

ArticlePlicy.php
public function delete(User $user, Article $article)
{
    return $user->id == $article->user_id;
}

以下のように書ける。

public function delete(Article $article)
{
    $this->authorize('delete', $article);

    $article->delete();
}

また、ミドルウェアによる認可もできる。以下のように書ける。

api.php
Route::delete('/articles/{article}', 'ArticlesController@destroy')->middleware('can:delete,article');

今の所、アカウントの種類によって認可するアクションを切り分けたいときに使う認識でいます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1