Intro
Yii RBAC可以整合User Component提供完整的權限控管,官方文件可以參考:
Yii2 - Role Based Access Control (RBAC)
概念
RBAC關聯架構
- Items分為Role與Module,用Type區分,但皆可直接Assign給User
- Items裡的Role即為Module的父集合,一個Role可以對多個Modules
- 一個User可以對多個Items,意即一人可以有多個Role再聯集多個指定Module
- 在介面概念上,Roles為一區塊可多選,選取或取消將影響Module區塊的Children選項並考慮其他已選Role聯集
RBAC系統架構
- User為獨立Component與資料Model,RBAC與之整合
- RBAC主要包含assignment(User-items)、items(角色與模組兩種Type)、rules(資料級別規則)
- RBAC三個Model提供
PhpManager
(檔案管理)與DbManager
(資料庫)載體選擇,皆支援Data Building
方法 Data Building
提供操作器管理RBAC資料
驗證實作
設定好RBAC後,可以調用yii\web\User::can()
做Module驗證判斷。
另外可以搭配ACF做Controller級別驗證,注意ACF中的roles
即為RBAC的items
:
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'roles' => ['module_name'],
]
],
],
];
}
延伸討論
Sudo/Root 概念
在我的RBAC應用架構中,User是可以定義是否為sudoer/root的,這將影響所以RBAC驗證控制的例外,例如Yii2的can()
遇到當前User為sudoer/root即例外通過。如此一來sudoer/root可以暢行系統所有權限也避免自我權限鎖死,一種類似Linux root或說co-founder概念。
Yii2 RBAC本身不支援sudoer/root例外