新建一個原則policy
php artisan make:policy PostPolicy -m Post
註冊policy
AuthServiceProvider.php檔案中有一個policies
屬性,將每一個實體對應到新建的原則。指定 Post
模型的原則是 PostPilicy
類別:
app/Providers/AuthServiceProvider.php
/**
* 應用程式的原則對應。
*
* @var array
*/
protected $policies = [
Post::class => PostPolicy::class,
];
Controller 內授權檢查
例如在預計檢查授權的地方加入下方程式碼!
因為有註冊對應的物件 PostPolicy 更新方法 檢查 $post 這個物件(檢查方式寫在第一個步驟新增的檔案中喔!等等會解釋)
$this->authorize('update', $post);
原則撰寫
新建原則,檢查原則都有了以後,就是要撰寫原則檔案中的方法,例如完成像是誰可以更新文章的權限邏輯,假設文章只能讓相同使用者ID可以更新內容,可以如下方的方式撰寫。
打開PostPolicy 通常會新增在 app/Policies/PostPolicy.php 找到 update方法,在方法中撰寫你想完成的邏輯程式
public function update(User $user, Post $post)
{
if ($user->id === $range->user_id) {
return true;
}
return false;
}
上方程式碼表示 使用者ID要等於文章的user_id 相同則回傳 true,反之回傳 false。
原則的方法中如果回傳為true那麼表示檢查通過,在我們一開始有設定檢查的地方,將會運行這個方法,如果false,會返回 403 沒有權限的 回應給使用者。
攔截所有檢查
有時候,你可能希望在原則賦予所有權限給指定使用者。例如:管理員可以通過這些權限的檢查,對於這種情況,只要在原則中定義一個 before
方法。原則的此方法會在其他所有授權檢查前被執行:
public function before($user, $ability)
{
if ($user->isSuperAdmin()) {
return true;
}
}