https://laravel.com/docs/5.8/authorization#writing-gates
使用者的操作權限,之前都是用Policy,沒用過Gate,覺得比較難理解。用Policy的前提是有一個對應的Model(文件裡又稱為resource),檢查使用者對這個Model有沒操作權限。
Gate寫在Closure裡比較有彈性,可以像Policy的判斷,也可以自定義,不用綁Model,例如超級管理員的權限檢查跟任何Model都沒關係。
Gate的定義:一般放在AuthServiceProvider,或要新增另一個Provider放也可以。
// 定義
// AppServiceProvider.php
public function boot()
{
Gate::define('update-post', function ($user, $post) {
// 條件
return $user->id === $post->user_id;
});
// 其他 Gate 定義
// Gate::define(...
// Gate::define(...
Gate::define('delete-post', function ($user) {
// 條件
return $user->is_admin;
});
}
Continue reading “Laravel 5 – Gate & permissions”