[Yii2][RBAC] 權限項目管理實踐 – Module Items Management

Intro

如果使用Yii2原生RBAC做好多層權限架構管理,例如video類下的program控制器下的create權限,可以讓你在Menu上看到video類跟program控制器選單。


資料結構

3-layer Item Name pattern:

{module}.{controller}.{action}

依照上述例子,一個create的權限Item Name應為:

video.program.create

那還需要另外兩個權限:video, video.program
以作為如選單上僅判斷video大類以及video.program選單。

video, video.programvideo.program.create三個繼承關係的權限items,並不適合使用Yii2 RBAC中的auth_item_child關係(如透過addChild()建構),因為video不能為最高父層,本身擁有video僅代表至少擁有一個子層,然後auth_item_child架構上有video代表擁有全部子層權限。

所以一個action的權限勢必連帶擁有其父層權限,例如擁有video.program.create items則必須連帶擁有父層:

video.program.create
video.program
video

在管理介面應用上,在下層有選取任一action時往父層繼承(例如選一個action,其controller自動加入權限,再其module自動加入權限)


Group結構實現

上述這種需要多層商業邏輯權限,可以使用auth_item中的data欄位做自定義,架構出type及階層關係,在管理介面時就可以透過getItems()取得全部權限items在逐一依照Data做分類資料建構,實現分群。

完成後的資料即可顯示出每個Group下擁有哪些Controllers再以下擁有哪些actions。

在Menu顯示與否的應用上,大分類透過can('video')驗證,再往下如選單透過can('video.program')驗證,action一般控制項在頁面上,就可以再透過can('video.program.create')控制新增按鈕。

Leave a Reply

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