[PHP] Yii2 – RBAC原理指南 – Role Based Access Control Guide

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例外

Leave a Reply

Your email address will not be published. Required fields are marked *