Laravel筆記-Laravel 5.3中Gate和授權(quán)的改進(jìn)

原文地址:https://josephsilber.com/index.php/posts/2016/08/03/authorization-improvements-in-laravel-5-3#table-of-contents


閱讀完Laravel中認(rèn)證的改進(jìn)后控淡,讓我們來看看Laravel5.3中授權(quán)的改進(jìn)吧纺酸。

注意:

以下將要說明的幾個特點抹缕,在5.2的版本中已經(jīng)被介紹過。但是红伦,這些特點在5.3中被稍稍改進(jìn)尊流,我們會在這里討論它們虐杯。

Laravel授權(quán)入門

如果你已經(jīng)對Laravel的授權(quán)系統(tǒng)很熟悉了玛歌,你可以跳過這一節(jié)。

Laravel的授權(quán)主要圍繞2個主要概念來實現(xiàn):

1.Gates

Gate即決定誰擁有進(jìn)行什么操作的功能權(quán)限(誰可以做什么)擎椰。使用Gate去注冊用戶的操作權(quán)限支子,之后核對Gate此用戶是否可以進(jìn)行給定操作。

2.Policy

Policy負(fù)責(zé)檢查單個模型的操作權(quán)限达舒。對于系統(tǒng)中每個你想要完成授權(quán)的模型值朋,你都需要對應(yīng)的Policy。

為了弄明白他們是怎么一起起作用的巩搏,我們通過命令

php artisan make:policy TaskPolicy

生成一個假定模型Task昨登。生成后,我們添加一個檢查用戶是否可以更新給定task的簡單的更新方法:

namespace App\Policies;

use App\Task;

use App\User;

class TaskPolicy{

? ? public function update(User $user, Task $task){

? ? ? ? return $user->id === $task->user_id;

? ? }

}

接下來我們應(yīng)該向?qū)olicy添加到AuthServiceProvider的Policy以注冊到Gate:

protected $policies = [

? ? \App\Task::class => \App\Policies\TaskPolicy::class,

];

AuthServiceProvider會將Policy注冊到Gate」岬祝現(xiàn)在開始丰辣,所以對模型Task的授權(quán)檢查都會指向Task Policy。

為了說明丈甸,我們新建一個更新給定task的簡單路由:

Route::put('tasks/{task}', function (App\Task $task) {

? ? abort_unless(Gate::allows('update', $task), 403);

? ? $task->update(request()->input());

});

我們會檢查Gate來看是否允許用戶更新給定task糯俗。Gate會傳遞當(dāng)前認(rèn)證用戶以及給定task到Policy中的update方法(如果用戶沒有登錄尿褪,Gate會自動拒絕所有權(quán)限詢問)睦擂,如果未授權(quán),我們會以403狀態(tài)終止杖玲。

(另外顿仇,難道你沒愛上abort_unless這個方法嗎?我指的是摆马,看一下它臼闻!讀起來就好像明白了:“除非Gate允許更新task否則程序?qū)⒔K止”。這就是名副其實最好用的Laravel)

輕松地在控制器中授權(quán)請求

Laravel中的控制器使用AuthorizesRequests trait來輕松地為任意請求授權(quán)囤采。你可以在控制器里調(diào)用授權(quán)方法述呐,它將在Gate中核對權(quán)限。如果沒有權(quán)限蕉毯,請求將會自動以403響應(yīng)終止乓搬。

我們來看一個控制器的案例:

use App\Task;

class TaskController

{

? ? ? ? public function update(Task $task)

? ? ? ? {

? ? ? ? ? ? ? ?$this->authorize('update', $task);

? ? ? ? ? ? ? ?$task->update(request()->input());

? ? ? ? ?}

}

和之前一樣,Gate將“請教”Policy的update方法并返回它的結(jié)果代虾。

(未完待續(xù))

进肯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市棉磨,隨后出現(xiàn)的幾起案子江掩,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件环形,死亡現(xiàn)場離奇詭異策泣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)斟赚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門着降,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拗军,你說我怎么就攤上這事任洞。” “怎么了发侵?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵交掏,是天一觀的道長。 經(jīng)常有香客問我刃鳄,道長盅弛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任叔锐,我火速辦了婚禮挪鹏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘愉烙。我一直安慰自己讨盒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布步责。 她就那樣靜靜地躺著返顺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蔓肯。 梳的紋絲不亂的頭發(fā)上遂鹊,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音蔗包,去河邊找鬼秉扑。 笑死,一個胖子當(dāng)著我的面吹牛调限,可吹牛的內(nèi)容都是我干的舟陆。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼旧噪,長吁一口氣:“原來是場噩夢啊……” “哼吨娜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起淘钟,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤宦赠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勾扭,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡毡琉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妙色。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桅滋。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖身辨,靈堂內(nèi)的尸體忽然破棺而出丐谋,到底是詐尸還是另有隱情,我是刑警寧澤煌珊,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布号俐,位于F島的核電站,受9級特大地震影響定庵,放射性物質(zhì)發(fā)生泄漏吏饿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一蔬浙、第九天 我趴在偏房一處隱蔽的房頂上張望猪落。 院中可真熱鬧,春花似錦畴博、人聲如沸笨忌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜜唾。三九已至杂曲,卻和暖如春庶艾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擎勘。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工咱揍, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棚饵。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓煤裙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親噪漾。 傳聞我的和親對象是個殘疾皇子硼砰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1、簡介 除了提供開箱即用的認(rèn)證服務(wù)之外欣硼,Laravel 還提供了一個簡單的方式來管理授權(quán)邏輯以便控制對資源的訪問...
    Yaococo88閱讀 2,004評論 0 0
  • 授權(quán) 簡介 laravel 除了提供開箱即用的授權(quán)服務(wù)题翰,還提供了許多簡單的方式來管理授權(quán)邏輯和資源的訪問控制。這些...
    Dearmadman閱讀 5,001評論 0 5
  • 原文鏈接 必備品 文檔:Documentation API:API Reference 視頻:Laracasts ...
    layjoy閱讀 8,610評論 0 121
  • 必備品文檔:DocumentationAPI: API Reference視頻:Laracasts速查表:Lara...
    ethanzhang閱讀 5,746評論 0 68
  • 過去做事情急,什么東西拿起來就用豹障,不喜歡進(jìn)行系統(tǒng)性的學(xué)習(xí)冯事,造成在使用過程中的錯誤和低效,現(xiàn)在感覺自己耐心多了血公,用之...
    馬文Marvin閱讀 1,989評論 0 10