Laravel 許可權 Policy 學習

龐浩然Paul發表於2018-06-17

tips: 昨天在教程看到有人總結 佇列
Summer: 總結是個不錯的習慣,不過別發到『問題』分類下,可以發到自己的部落格文章裡。
我也總結一下,從 許可權策略 開始。

正文 :
為了安全起見,我們只允許 XXX 的建立者 AAA 可以操作 (action) 對應的 XXX 資訊,這個需求可以通過授權策略類(Policy)來實現。

第一步:

php artisan make:policy XXXPolicy

第二步:

app/Policies/XXXPolicy.php

<?php

namespace App\Policies;

use App\Models\XXX;
use App\Models\AAA;
use Illuminate\Auth\Access\HandlesAuthorization;

class XXXPolicy
{
    use HandlesAuthorization;

    public function {actionMethod}(AAA $aaa, XXX $xxx)
    {
        return $xxx->aaa_ss == $aaa->ss; // 目的:校驗操作者與所有者是否相同。
    }
}

第三步:
註冊這個策略
app/Providers/AuthServiceProvider.php

use App\Models\XXX;
use App\Policies\XXXPolicy;
.
.
.
    protected $policies = [
        ...
        XXX::class       => XXXPolicy::class,
                ...
    ];

最後在具體控制器中使用它:
appHttp/Controllers/XXX(s)Controller.php

...
public function show(XXX $xxx, ...)
{
     $this->authorize('{actionMethod}', $xxx);
     ...
}
...

1、出現問題,可以通過丟擲異常處理,異常程式碼 403。
2、與中介軟體對比,中介軟體是公用的,像是洋蔥的外殼一層一層的;許可權是具體的,對具體的動作進行驗證,更精細。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章