a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > PHP > 正文

yii2權(quán)限控制rbac之rule詳細講解

2020-03-22 20:31:45
字體:
供稿:網(wǎng)友
  • 在我們之前yii2搭建后臺以及rbac詳細教程中,不知道你曾經(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 bacRule類的execute方法。

    <?phpnamespace backendcomponents;use Yii;use yiibacRule;html' target='_blank'>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)限只針對文章的修改,隨后我們將其分配給用戶所屬角色

    需要注意了,此處嚴重警告,這里新增加的權(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,也就是我們后面要進行的新增規(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認證起作用了沒呢?

    測試步驟如下可做參考:

    當(dāng)前用戶創(chuàng)建一篇文章,記得記錄當(dāng)前文章的創(chuàng)建者,其角色是管理員,我們默認User::ROLE_ADMIN 創(chuàng)建一個普通用戶,且也創(chuàng)建一篇文章,同時也需要記錄當(dāng)前文章的創(chuàng)建者 分別用管理員帳號和普通用戶登錄系統(tǒng)修改這兩篇文章,結(jié)論自然是滿足我們一開始所提的需求,管理員兩篇文章均可修改,普通用戶只能修改自己的文章

    [考慮目前國內(nèi)網(wǎng)站大部分采集文章十分頻繁,更有甚者不注明原文出處,原作者更希望看客們查看原文,以防有任何問題不能更新所有文章,避免誤導(dǎo)!]

    PHP編程

    鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

  • 發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 免费的黄视频 | 亚洲在线一区 | 色婷婷综合久久久中文字幕 | 日本黄色电影网址 | 午夜一本 | 亚洲精品视频在线观看免费 | 美女天堂av | 精品国产一区二区三区四区 | 亚洲视频在线观看免费 | 黄色片视频网站 | 天天草天天干 | 亚洲欧美一区二区精品中文字幕 | 亚洲精品蜜桃 | 久久久久久毛片 | 亚洲一二三四在线 | 久久艹国产视频 | 欧美aaa大片 | 日韩一区高清视频 | 亚洲免费成人 | 一区二区在线视频 | 久久艹精品视频 | 午夜日韩 | 日本免费在线观看 | 久久亚洲国产精品日日av夜夜 | 午夜精品在线观看 | 久久国产99 | 日韩精品一区二区三区第95 | 女bbwxxxx另类| 自拍视频在线播放 | 日韩在线影视 | 欧美午夜理伦三级在线观看偷窥 | 日韩视频在线一区二区 | 男女羞羞视频免费在线观看 | 中文日韩在线 | www国产成人免费观看视频 | 在线观看www | 一区二区不卡 | 自拍偷拍小视频 | 亚洲黄色在线观看 | 国产精品禁久久精品 | 成人免费视频网站在线观看 |