這篇文章主要介紹了關於Laravel 權限控制Gate Policy,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
##關於權限
源起
最基本的權限控制,三元運算子 ? :。很顯然條件判斷,後面跳到對應的執行邏輯。 laravel的想法是將執行邏輯(生產程式碼),授權(條件判斷邏輯)分開。重點關注條件的產生,通俗講強化授權邏輯(這對複雜的授權十分有用)。公設:所有的代碼在服務註冊完畢後,啟動。所以下面這段程式碼會被註冊。其目的是找到真正授權判斷的邏輯體。Gate::define('update articles', 'ArticlePolicy@update')其中第一個參數顯然只是一個授權標識符(用來呼叫的句柄參數),第二個參數才為授權的邏輯執行體。
laravel授權定義
在AuthServiceProvider 的
boot 方法裡定義授權
#
Gate::define('update articles', function ($user, $article) { return $user->id == $article->user_id; }); Gate::define('update articles', 'ArticlePolicy@edit');
<?php namespace App\Policies; use App\User; use App\Models\Article; class ArticlePolicy { public function update(User $user, Article $article) { return $user->id == $article->author_id; } }
laravel授權使用
Gate::allows('update articles', $article) 和
Gate::denies('update articles', $article)。
trait AuthorizesRequests
$this->authorize('update articles', $article)。
@can('update articles', $article) 和
@cannot('update articles', $article)指令。
$user->can('update articles', $article) 和
$user->cannot('update articles', $article)。
Laravel Policy
AuthServiceProvider 的
policies 陣列屬性裡先定義授權映射關係
/** * The policy mappings for the application. * * @var array */ protected $policies = [ Article::class => ArticlePolicy::class, ];
<?php namespace App\Policies; use App\User; use App\Models\Article; use Illuminate\Auth\Access\HandlesAuthorization; class ArticlePolicy { use HandlesAuthorization; public function create(User $user) { return true; } public function delete(User $user, Article $article) { return $user->id == $article->author_id; } public function before($user, $ability) { if($user->isSuperAdmin()){ return true; } } }
#注意:
Policy 只是在普通PHP 類別基礎上新增了一個HandlesAuthorization trait。
以上是Laravel 權限控制 Gate Policy的詳細內容。更多資訊請關注PHP中文網其他相關文章!