特定のリソースに対するユーザーアクションを認可
する仕組みだそうです。
例えば、ブログの記事削除は本人にしかできないようにすることが可能になる仕組みのことです。
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');
今の所、アカウントの種類によって認可するアクションを切り分けたいときに使う認識でいます。