LARAVEL 權限設定筆記

新建一個原則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;
    }
}

參考文件

https://laravel.tw/docs/5.2/authorization


發佈留言