亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Yii2 rbac權限控制之rule的示例分析

發布時間:2021-08-30 15:08:42 來源:億速云 閱讀:152 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Yii2 rbac權限控制之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。具體添加方式可參考下方截圖

Yii2 rbac權限控制之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認證起作用了沒呢?

測試步驟如下可做參考:

1.當前用戶創建一篇文章,記得記錄當前文章的創建者,其角色是管理員,我們默認User::ROLE_ADMIN

2.創建一個普通用戶,且也創建一篇文章,同時也需要記錄當前文章的創建者

3.分別用管理員帳號和普通用戶登錄系統修改這兩篇文章,結論自然是滿足我們一開始所提的需求,管理員兩篇文章均可修改,普通用戶只能修改自己的文章

感謝各位的閱讀!關于“Yii2 rbac權限控制之rule的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

塘沽区| 梅州市| 华池县| 扶风县| 阳原县| 江北区| 策勒县| 从化市| 滦南县| 兴业县| 海兴县| 咸丰县| 沧源| 蓬莱市| 图木舒克市| 江门市| 哈巴河县| 哈尔滨市| 泰宁县| 和硕县| 秭归县| 成都市| 宜宾市| 武山县| 佳木斯市| 阜新| 土默特左旗| 呼和浩特市| 冷水江市| 佛山市| 逊克县| 安泽县| 牡丹江市| 铜山县| 西林县| 阿尔山市| 长沙市| 万荣县| 乐至县| 社旗县| 鄂伦春自治旗|