Yii2 rbac權(quán)限控制之rule教程詳解
在我們之前Yii2搭建后臺并實現(xiàn)rbac權(quán)限控制完整實例教程中,不知道你曾經(jīng)疑惑過沒有一個問題,rule表是做什么的,為什么在整個過程中我們都沒有涉及到這張表?
相信我不說,部分人也都會去嘗試,或百度或google,到頭來也會竹籃打水,這部分講解的內(nèi)容少之又少??!
對于一般的權(quán)限系統(tǒng)而言,我們之前做的rbac一般情況下是足夠的,即時沒有rule,相信你也能實現(xiàn)我們用rule實現(xiàn)的功能。
我們就以官網(wǎng)的例子給出一個具體的操作教程,看看這個神秘的rule到底是做什么的!
看需求:
我們有管理員和普通用戶,對于文章系統(tǒng)而言,我們允許管理員對文章的任何操作,但是只允許普通用戶創(chuàng)建文章和修改自己創(chuàng)建的文章,注意哦,是允許其修改自己創(chuàng)建的文章,不是不允許修改文章,也不是修改所有的文章!
看yii2 rbac rule怎么去實現(xiàn),重點是教大家怎么去使用這個rule,也解開眾多人心中的節(jié)!
在我們添加rule之前,需要先實現(xiàn) yii\rbac\Rule類的execute方法。
<?php namespace backend\components; use Yii; use yii\rbac\Rule; class ArticleRule extends Rule { public $name = 'article'; public function execute($user, $item, $params) { // 這里先設(shè)置為false,邏輯上后面再完善 return false; } }
接著,我們才可以去后臺rule列表(/admin/rule/index)添加rule。具體添加方式可參考下方截圖
注意,上面這一步很多人會死在類名的添加上,記得加上我們ArticleRule文件所在的命名空間!
我們看第三步,該步驟也是很容易出錯的地方!該篇教程請注意集中精力,前方高能!
我們訪問權(quán)限列表(/admin/permission/index)新增權(quán)限,該權(quán)限只針對文章的修改,隨后我們將其分配給用戶所屬角色
需要注意了,此處嚴(yán)重警告,這里新增加的權(quán)限所控制的路由也就是文章的更新操作(/article/update)分配給當(dāng)前用戶僅且一次,重復(fù)分配當(dāng)前操作給所屬角色或用戶,可能造成rule失效,失效原因則是覆蓋!
此刻再次刷新文章的更新頁面(/article/update/1),很顯然直接給我們了403 forbidden沒權(quán)限訪問的提示,也就是我們剛剛添加的rule生效了!如果此刻沒生效,請檢查上面所說的兩個注意點!
然后我們實現(xiàn)ArticleRule::execute方法內(nèi)業(yè)務(wù)邏輯,可參考如下:
class ArticleRule extends Rule { public $name = 'article'; /** * @param string|integer $user 當(dāng)前登錄用戶的uid * @param Item $item 所屬規(guī)則rule,也就是我們后面要進(jìn)行的新增規(guī)則 * @param array $params 當(dāng)前請求攜帶的參數(shù). * @return true或false.true用戶可訪問 false用戶不可訪問 */ public function execute($user, $item, $params) { $id = isset($params['id']) ? $params['id'] : null; if (!$id) { return false; } $model = Article::findOne($id); if (!$model) { return false; } $username = Yii::$app->user->identity->username; $role = Yii::$app->user->identity->role; if ($role == User::ROLE_ADMIN || $username == $model->operate) { return true; } return false; } }
最后就是驗證了,到底我們所實現(xiàn)的rule認(rèn)證起作用了沒呢?
測試步驟如下可做參考:
1.當(dāng)前用戶創(chuàng)建一篇文章,記得記錄當(dāng)前文章的創(chuàng)建者,其角色是管理員,我們默認(rèn)User::ROLE_ADMIN
2.創(chuàng)建一個普通用戶,且也創(chuàng)建一篇文章,同時也需要記錄當(dāng)前文章的創(chuàng)建者
3.分別用管理員帳號和普通用戶登錄系統(tǒng)修改這兩篇文章,結(jié)論自然是滿足我們一開始所提的需求,管理員兩篇文章均可修改,普通用戶只能修改自己的文章
以上所述是小編給大家介紹的Yii2 rbac權(quán)限控制之rule教程詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- yii2 RBAC使用DbManager實現(xiàn)后臺權(quán)限判斷的方法
- Yii2 rbac權(quán)限控制操作步驟實例教程
- Yii2 rbac權(quán)限控制之菜單menu實例教程
- Yii2搭建后臺并實現(xiàn)rbac權(quán)限控制完整實例教程
- YII框架模塊化處理操作示例
- YII分模塊加載路由的實現(xiàn)方法
- Yii中srbac權(quán)限擴(kuò)展模塊工作原理與用法分析
- YII模塊實現(xiàn)綁定二級域名的方法
- Yii2創(chuàng)建控制器(createController)方法詳解
- yii2控制器Controller Ajax操作示例
- Yii2設(shè)置默認(rèn)控制器的兩種方法
- Yii2框架控制器、路由、Url生成操作示例
- YII2框架中使用RBAC對模塊,控制器,方法的權(quán)限控制及規(guī)則的使用示例
相關(guān)文章
php中curl和soap方式請求服務(wù)超時問題的解決
本篇文章主要介紹了php中curl和soap方式請求服務(wù)超時問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06解決PHP里大量數(shù)據(jù)循環(huán)時內(nèi)存耗盡的方法
錯誤信息提示最大內(nèi)存已經(jīng)耗盡,該如何解決呢?下面小編給大家解決PHP里大量數(shù)據(jù)循環(huán)時內(nèi)存耗盡的問題,需要的朋友可以參考下2015-10-10Laravel ORM對Model::find方法進(jìn)行緩存示例詳解
這篇文章主要給大家介紹了關(guān)于Laravel ORM對Model::find方法進(jìn)行緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03PHP使用range協(xié)議實現(xiàn)輸出文件斷點續(xù)傳代碼實例
這篇文章主要介紹了PHP使用range協(xié)議實現(xiàn)輸出文件斷點續(xù)傳代碼實例,需要的朋友可以參考下2014-07-07VSCode+PHPstudy配置PHP開發(fā)環(huán)境的步驟詳解
這篇文章主要介紹了VSCode+PHPstudy配置PHP開發(fā)環(huán)境,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08windows 2008r2+php5.6.28環(huán)境搭建詳細(xì)過程
這篇文章主要介紹了windows 2008r2+php5.6.28環(huán)境搭建詳細(xì)過程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-06-06PHP使用GD庫制作驗證碼的方法(點擊驗證碼或看不清會刷新驗證碼)
這篇文章主要介紹了PHP使用GD庫制作驗證碼的方法(點擊驗證碼或看不清會刷新驗證碼)的相關(guān)資料,需要的朋友可以參考下2017-08-08Laravel解決nesting level錯誤和隱藏index.php的問題
今天小編就為大家分享一篇Laravel解決nesting level錯誤和隱藏index.php的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10