作者:白狼 出處:http://www.manks.top/yii2_rbac_rule.html 本文版權歸作者,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
在我們之前yii2搭建后台以及rbac詳細教程中,不知道你曾經疑惑過沒有一個問題,rule表是做什么的,為什么在整個過程中我們都沒有涉及到這張表?
相信我不說,部分人也都會去嘗試,或百度或google,到頭來也會竹籃打水,這部分講解的內容少之又少啊!
對於一般的權限系統而言,我們之前做的rbac一般情況下是足夠的,即時沒有rule,相信你也能實現我們用rule實現的功能。
我們就以官網的例子給出一個具體的操作教程,看看這個神秘的rule到底是做什么的!
看需求:
我們有管理員和普通用戶,對於文章系統而言,我們允許管理員對文章的任何操作,但是只允許普通用戶創建文章和修改自己創建的文章,注意哦,是允許其修改自己創建的文章,不是不允許修改文章,也不是修改所有的文章!
看yii2 rbac rule怎么去實現,重點是教大家怎么去使用這個rule,也解開眾多人心中的節!
在我們添加rule之前,需要先實現 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) { // 這里先設置為false,邏輯上后面再完善 return false; } }
接着,我們才可以去后台rule列表(/admin/rule/index)添加rule。具體添加方式可參考下方截圖
注意,上面這一步很多人會死在類名的添加上,記得加上我們ArticleRule文件所在的命名空間!
我們看第三步,該步驟也是很容易出錯的地方!該篇教程請注意集中精力,前方高能!
我們訪問權限列表(/admin/permission/index)新增權限,該權限只針對文章的修改,隨后我們將其分配給用戶所屬角色
需要注意了,此處嚴重警告,這里新增加的權限所控制的路由也就是文章的更新操作(/article/update)分配給當前用戶僅且一次,重復分配當前操作給所屬角色或用戶,可能造成rule失效,失效原因則是覆蓋!
此刻再次刷新文章的更新頁面(/article/update/1),很顯然直接給我們了403 forbidden沒權限訪問的提示,也就是我們剛剛添加的rule生效了!如果此刻沒生效,請檢查上面所說的兩個注意點!
然后我們實現ArticleRule::execute方法內業務邏輯,可參考如下:
[考慮目前國內網站大部分采集文章十分頻繁,更有甚者不注明原文出處,原作者更希望看客們查看原文,以防有任何問題不能更新所有文章,避免誤導!]