yii2許可權控制rbac之rule詳細講解,yii2許可權控制rbac_PHP教程

來源:互聯網
上載者:User

yii2許可權控制rbac之rule詳細講解,yii2許可權控制rbac


在我們之前yii2搭建後台以及rbac詳細教程中,不知道你曾經疑惑過沒有一個問題,rule表是做什麼的,為什麼在整個過程中我們都沒有涉及到這張表?

相信我不說,部分人也都會去嘗試,或百度或google,到頭來也會竹籃打水,這部分講解的內容少之又少啊!

對於一般的許可權系統而言,我們之前做的rbac一般情況下是足夠的,即時沒有rule,相信你也能實現我們用rule實現的功能。

我們就以官網的例子給出一個具體的操作教程,看看這個神秘的rule到底是做什麼的!

看需求:

我們有管理員和普通使用者,對於文章系統而言,我們允許管理員對文章的任何操作,但是只允許普通使用者建立文章和修改自己建立的文章,注意哦,是允許其修改自己建立的文章,不是不允許修改文章,也不是修改所有的文章!

看yii2 rbac rule怎麼去實現,重點是教大家怎麼去使用這個rule,也解開眾多人心中的節!

在我們添加rule之前,需要先實現 yii\rbac\Rule類的execute方法。

phpnamespace 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方法內商務邏輯,可參考如下:

class ArticleRule extends Rule{    public $name = 'article';    /**     * @param string|integer $user 當前登入使用者的uid     * @param Item $item 所屬規則rule,也就是我們後面要進行的新增規則     * @param array $params 當前請求攜帶的參數.      * @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;    }}

最後就是驗證了,到底我們所實現的rule認證起作用了沒呢?

測試步驟如下可做參考:

[考慮目前國內網站大部分採集文章十分頻繁,更有甚者不註明原文出處,原作者更希望看客們查看原文,以防有任何問題不能更新所有文章,避免誤導!]

查看原文

http://www.bkjia.com/PHPjc/1138631.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1138631.htmlTechArticleyii2許可權控制rbac之rule詳細講解,yii2許可權控制rbac 在我們之前yii2搭建後台以及rbac詳細教程中,不知道你曾經疑惑過沒有一個問題,rule表是做...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.