摘要:提供更簡單的方式來處理用戶授權(quán)動作。類似用戶認證,有種主要方式來實現(xiàn)用戶授權(quán)和策略,我這里主要講解下策略的使用。文檔上面有詳細的說明,我這里只根據(jù)自己使用過程做一個簡單的筆記。
Laravel 提供更簡單的方式來處理用戶授權(quán)動作。類似用戶認證,有 2 種主要方式來實現(xiàn)用戶授權(quán):gates 和策略,我這里主要講解下策略的使用。
文檔 上面有詳細的說明,我這里只根據(jù)自己使用過程做一個簡單的筆記。
例子:我這里準備用編輯文章授權(quán)來做演示,在這個權(quán)限中,只有文章所有者可以編輯,來體驗一下 Policy 如何實現(xiàn)它。
準備工作安裝 laravel
composer create-project --prefer-dist laravel/laravel laravel-vue "5.5.*"
建表
php artisan make:migration posts --create=posts Schema::create("posts", function (Blueprint $table) { $table->increments("id"); $table->string("title", 200); $table->text("content"); $table->timestamps(); $table->index("user_id"); });
創(chuàng)建 Model
php artisan make:model PostModel # app/PostModel.php namespace AppModels; use IlluminateDatabaseEloquentModel; class PostModel extends Model { protected $table = "posts"; protected $fillable = ["title", "content", "user_id"]; }生成策略
策略其實就是授權(quán)方案所對應(yīng)的類文件,它在 app/Policies 目錄下面,下面我用命令創(chuàng)建一個策略文件。
php artisan make:policy PostPolicy
命令執(zhí)行完畢之后,會生成 app/Policies/PostPolicy.php 文件,下面我們開始編輯它。
# app/Policies/PostPolicy.php namespace AppPolicies; use AppUser; use AppPostModel; use IlluminateAuthAccessHandlesAuthorization; class TopicPolicy { use HandlesAuthorization; public function create(User $user) { // code } public function update(User $user, PostModel $postModel) { return $user->id === $postModel->user_id; } public function delete(User $user, PostModel $postModel) { // code } }注冊策略
授權(quán)策略需要注冊才能使用,在什么地方注冊呢?laravel5.5 在 AuthServiceProvider 中包含一個 policies 的屬性,這里面注冊策略,下面我們看下如何注冊。
# app/Providers/AuthServiceProvider.php namespace AppProviders; use IlluminateSupportFacadesGate; use IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider; user AppPostModel; use AppPoliciesPostPolicy; class AuthServiceProvider extends ServiceProvider { protected $policies = [ PostModel::class => PostPolicy::class, // 注意在這里注冊 policy ]; public function boot() { $this->registerPolicies(); } }使用策略
注冊完畢之后,在 User 模型中有 can 和 cant 方法來使用策略,如在 PostController 編輯時使用:
# app/Http/Controllers/PostController.php public function create() { if (Auth::user()->can("create", PostModel)) { // 注意這里的用法 // 可以創(chuàng)建 } else { // 無權(quán)限 } } public function update(Request $request) { $id = $request->input("id"); $post = PostModel::findOrFail($id); if (Auth::user()->can("update", $post)) { // 可以編輯 } else { // 無編輯權(quán)限 } }
如果你想超級管理員也擁有編輯權(quán)限的話,可以在定義策略的時候加上策略過濾器,也就是一個 before 方法:
# app/Policies/PostPolicy.php public function before($user, $ability) { if ($user->isSuperAdmin()) { return true; } } # app/User.php public function isSuperAdmin() { // 定義ID為1為超級管理員 if ($this->id == 1) { return true; } return false; }
在 balde 模板中使用 @can 和 @cannot方法來判斷
@can("create", AppPostModel::class) 創(chuàng)建 @endcan @can("update", $post) 編輯 @endcan
好了,這次就寫到這里,希望此篇筆記能幫助到你。
原文地址
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28492.html
摘要:現(xiàn)在面向所有人正式發(fā)布了。并且有計劃將作為可選擴展包發(fā)布,你仍然可以在項目中使用它們。是最新的穩(wěn)定版本,將在年月左右處理收到的錯誤修復(fù)和更新,并在年月左右之前進行安全修復(fù)。中文翻譯中文翻譯已啟動,請關(guān)注更多翻譯文章請見開發(fā)者社區(qū) showImg(https://segmentfault.com/img/remote/1460000018318895?w=1680&h=859); Lar...
摘要:是一個用語言打造的輕量級開源訪問控制框架,目前在開源。采用了元模型的設(shè)計思想,支持多種經(jīng)典的訪問控制方案,如基于角色的訪問控制基于屬性的訪問控制等。 showImg(https://segmentfault.com/img/bVbkDJf?w=500&h=220); PHP-Casbin 是一個用 PHP 語言打造的輕量級開源訪問控制框架( https://github.com/php...
摘要:自動代碼擴展開發(fā)時遵守的代碼風格是項目開發(fā)規(guī)范。遵照此規(guī)范,在實際操作中,有許多重復(fù),接下來推薦一款專為此規(guī)范量身定制的代碼生成器??梢岳么藬U展來快速構(gòu)建項目原型。后續(xù)還會為大家?guī)硪恍┳钚碌募夹g(shù)擴展。 whoops 錯誤提示擴展 whoops 是一個非常優(yōu)秀的 PHP Debug 擴展,它能夠使你在開發(fā)中快速定位出錯的位置。laravel默認安裝。showImg(https://s...
摘要:自動代碼擴展開發(fā)時遵守的代碼風格是項目開發(fā)規(guī)范。遵照此規(guī)范,在實際操作中,有許多重復(fù),接下來推薦一款專為此規(guī)范量身定制的代碼生成器??梢岳么藬U展來快速構(gòu)建項目原型。后續(xù)還會為大家?guī)硪恍┳钚碌募夹g(shù)擴展。 whoops 錯誤提示擴展 whoops 是一個非常優(yōu)秀的 PHP Debug 擴展,它能夠使你在開發(fā)中快速定位出錯的位置。laravel默認安裝。showImg(https://s...
閱讀 3117·2021-10-12 10:20
閱讀 2835·2021-09-27 13:56
閱讀 806·2021-09-27 13:36
閱讀 1444·2021-09-26 09:46
閱讀 2433·2019-08-30 14:02
閱讀 2700·2019-08-28 18:14
閱讀 1280·2019-08-26 10:32
閱讀 1717·2019-08-23 18:25