日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Laravel 学习笔记: 授权策略(Policy)

發(fā)布時(shí)間:2023/12/16 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Laravel 学习笔记: 授权策略(Policy) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Policy(即策略)是在特定模型或者資源中組織授權(quán)邏輯的類,用來處理用戶授權(quán)動(dòng)作。

比如在博客程序中會(huì)有一個(gè) Article 模型,這個(gè)模型就會(huì)有一個(gè)相應(yīng)的 ArticlePolicy 來對用戶的操作進(jìn)行授權(quán),比如在修改一篇文章時(shí),我們會(huì)這樣寫:

$article = Article::find(1) // 校驗(yàn)這篇是否屬于當(dāng)前用戶 if ($article->user_id == Auth::id()) {// 修改文章 } return ture;

Policy 其實(shí)就是將校驗(yàn)的邏輯從控制器轉(zhuǎn)移到相對應(yīng)的模型策略 (ArticlePolicy) 中。

生成 Policy

使用 php artisan make:policy ArticlePolicy 命令生成 Policy,保存在 app/Policies 目錄下。

注冊 Policy

然后在 app/Providers/AuthServiceProvider.php 的 policies 數(shù)組中注冊該策略,將 Article 模型與對應(yīng)的 ArticlePolicy 策略進(jìn)行綁定。

<?phpnamespace App\Providers;use App\Models\Article; use App\Policies\ArticlePolicy; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;class AuthServiceProvider extends ServiceProvider {/*** 應(yīng)用的策略映射。** @var array*/protected $policies = [Article::class => ArticlePolicy::class,];/*** 注冊任意用戶認(rèn)證、用戶授權(quán)服務(wù)。** @return void*/public function boot(){$this->registerPolicies();//} }

編寫 Policy 校驗(yàn)邏輯

接下來就在 ArticlePolicy 策略中編寫校驗(yàn)用戶是否擁有修改文章的權(quán)限的方法。

<?phpnamespace App\Policies;use App\Models\Article; use App\User;class ArticlePolicy {public function update(User $user, Article $article){return $user->id == $article->user_id;} }

在 update 方法中判斷文章作者id是否等于當(dāng)前登錄的用戶id,返回 true 或 false。true 可以進(jìn)行修改操作,false 則會(huì)拋出沒有權(quán)限。

使用 Policy

然后就是在控制器中的使用了。

<?phpnamespace App\Http\Controllers;use App\Models\Article; use Illuminate\Http\Request;class ArticleController extends Controller {public function edit(Request $request, Article $article){// 校驗(yàn)用戶是否有操作權(quán)限$this->authorize('update', $article);// 更新文章$article->fill($request->all());$article->save();} }

authorize 的第一個(gè)參數(shù)表示本次驗(yàn)證使用 ArticlePolicy 里面的 update 方法, $article 實(shí)例用來判斷使用哪一種策略,當(dāng)然也可以不用指定具體實(shí)例,只需要傳遞一個(gè)類名。

$this->authorize('update', Article::class);

總結(jié)

以上是生活随笔為你收集整理的Laravel 学习笔记: 授权策略(Policy)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。