laravel獲取不到session的三種解決辦法【推薦】
以下是【金聰采編】分享的內(nèi)容全文:
前言
本文主要給大家介紹的是關(guān)于Laravel用戶授權(quán)系統(tǒng)使用的相關(guān)內(nèi)容
首先兩個(gè)概念分清楚:
用戶身份認(rèn)證 Authentication - 處理用戶登錄, 退出, 注冊(cè), 找回密碼, 重置密碼, 用戶郵箱認(rèn)證 etc..
權(quán)限管理 Authorization - 負(fù)責(zé) 用戶 與 權(quán)限, 用戶組 三者之間的對(duì)應(yīng), 以及管理.
下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
基本用法
示例
$this->authorize('update', $post);第一個(gè)參數(shù) $ability,表示具備什么權(quán)限。第二個(gè)參數(shù) $post,是一個(gè)模型實(shí)例。
不需指定模型的動(dòng)作,比如 create,不需要指定的模型。第二個(gè)參數(shù)傳一個(gè)類名。如:
$this->authorize('create', Post::class);使用的場(chǎng)景有:控制器輔助方法,中間件,Blade模板,User 模型的 can 和 can't 方法。
authorize方法:
public function authorize($ability, $arguments = []){ list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments); return app(Gate::class)->authorize($ability, $arguments);}有兩種方式實(shí)現(xiàn)用戶授權(quán)
Gates
編寫 Gates
一般在 app/Providers/AuthServiceProvider 的 boot 方法中定義。
Gate::define('update-post', function ($user, $post) { return $user->id == $post->user_id;});第一個(gè)參數(shù)是權(quán)限的名稱,第二個(gè)參數(shù)是滿足權(quán)限的條件,可以是閉包,控制器方法。
授權(quán)動(dòng)作
allows 和 denies 兩種方法,表示允許和否定。
第一個(gè)參數(shù)是權(quán)限的名稱,第二個(gè)參數(shù)是模型,可以為空。這里不需要傳入用戶,框架會(huì)自動(dòng)處理。
if (Gate::allows('update-post', $post)) { // 指定用戶可以更新博客...} if (Gate::denies('update-post', $post)) { // 指定用戶不能更新博客...}如果需要指定特定用戶,可以使用 Gate Facade 中的 forUser 方法:
if (Gate::forUser($user)->allows('update-post', $post)) { // 指定用戶可以更新博客...} if (Gate::forUser($user)->denies('update-post', $post)) { // 指定用戶不能更新博客...}策略
生成策略
artisan 命令:
php artisan make:policy PostPolicy
也可以指定 model,生成包含 CURD 的策略方法。
注冊(cè)策略
在 AuthServiceProvider 的 policies 屬性,可以將模型和策略對(duì)應(yīng)起來(lái)。如:
protected $policies = [ Post::class => PostPolicy::class,];
策略方法
public function update(User $user, Post $post){ return $user->id === $post->user_id;}策略方法,就是權(quán)限名稱,$this->authorize(‘update', $post) 的第一個(gè)參數(shù)就對(duì)應(yīng)同名的策略方法,第二個(gè)參數(shù) $post 代表它是一個(gè) Post 模型,框架會(huì)根據(jù)參數(shù)判斷采用 Post::class => PostPolicy::class 這個(gè)策略。
當(dāng) authorize 方法調(diào)用的時(shí)候,實(shí)際上會(huì)自動(dòng)注入 User 和 Post 類型的兩個(gè)參數(shù),也因此使用授權(quán)系統(tǒng)必須是用戶登錄的情況下。
使用策略也不一定要和模型綁定,比如這樣也可以:
protected $policies = [ Travel::class => TravelPolicy::class, 'aaa'=>TravelPolicy::class,];
這個(gè) aaa 字符串對(duì)應(yīng)策略類為 TravelPolicy::class,在控制器使用 authorize 判斷授權(quán):
$this->authorize('update','aaa');此時(shí)也是可行的,第二個(gè)參數(shù)這個(gè)時(shí)候就必須是字符串 aaa 了,然后 authorize 方法只會(huì)自動(dòng)注入 User 參數(shù)。
官方文檔
Laravel 5.5 文檔
https://laravel-china.org/docs/laravel/5.5/authorization/1310
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)金聰精品的支持。
1.軟件源碼推廣展示:目的展示軟件相關(guān)功能,接收技術(shù)學(xué)習(xí)者測(cè)試、測(cè)評(píng);
2.教程課程信息展示:展示課程信息,傳授課程各階段內(nèi)容;
3.設(shè)計(jì)素材圖片展示:展示素材設(shè)計(jì)理念、思維方式、傳播設(shè)計(jì)理念;
4.福利優(yōu)惠信息展示:分享各類最新的福利信息,各種優(yōu)惠信息展示;
以上分享目的僅供學(xué)習(xí)、參考使用,請(qǐng)勿用于其他用途,如果想商業(yè)使用或者代理,請(qǐng)自行聯(lián)系版權(quán)方獲取授權(quán)。任何未獲取授權(quán)的商業(yè)使用與本站無(wú)關(guān),請(qǐng)自行承擔(dān)相應(yīng)責(zé)任。
本站不存儲(chǔ)任何資源文件,敬請(qǐng)周知!
如果您認(rèn)為本頁(yè)信息內(nèi)容侵犯了您的相關(guān)權(quán)益(包含但不限于:著作權(quán)、首發(fā)權(quán)、隱私權(quán)等權(quán)利),或者您認(rèn)為自己是此信息的權(quán)利人但是此信息不是自己發(fā)布的,可以直接版權(quán)舉報(bào)投訴,我們會(huì)根據(jù)網(wǎng)站注冊(cè)協(xié)議、資源分享協(xié)議等協(xié)議處理,以保護(hù)您的合法權(quán)益。
本網(wǎng)站采用 BY-NC-SA 協(xié)議進(jìn)行授權(quán) 轉(zhuǎn)載請(qǐng)注明原文鏈接:laravel獲取不到session的三種解決辦法【推薦】

侵權(quán)舉報(bào)/版權(quán)申訴



