ThinkPHP 內建 RBAC(Role-Based Access Control)實作範例,文檔較簡略。本文拆解核心資料表結構、關鍵配置項、目錄規劃,幫助開發者快速建立權限系統。
儲存所有需管控的模組、控制器、動作:
| 欄位 | 說明 |
|---|---|
| id | 主鍵 |
| name | 節點名稱(專案/模組/控制器/動作) |
| pid | 父節點 ID(樹狀結構) |
| level | 層級:1=專案、2=模組、3=控制器、4=動作 |
| status | 啟用狀態(1=啟用) |
建立順序範例:
pid=0, level=1pid=專案ID, level=2pid=模組ID, level=3此表亦可直接生成後台導航選單。
定義角色群組(如:超級管理員、編輯、會員)。
系統使用者,欄位含 username、password、status 等。表名可自訂,需在配置對應。
多對多關聯,一個使用者可屬多個角色。
對應 角色 ↔ 節點,決定某角色是否可存取某節點。
建議補充 pid 欄位 以利樹狀查詢。
config.php'USER_AUTH_ON' => true, // 開啟權限驗證
'USER_AUTH_TYPE' => 2, // 1=登入驗證 2=即時驗證(每請求檢查)
'USER_AUTH_KEY' => 'authId', // Session 標識鍵名
'ADMIN_AUTH_KEY' => 'administrator',// 超級管理員標識
'USER_AUTH_MODEL' => 'User', // 驗證模型(對應 think_user)
'AUTH_PWD_ENCODER' => 'md5', // 密碼加密方式
'USER_AUTH_GATEWAY' => '/Public/login',// 登入閘道
'NOT_AUTH_MODULE' => 'Public', // 無需驗證模組
'REQUIRE_AUTH_MODULE' => '', // 強制驗證模組
'NOT_AUTH_ACTION' => '', // 無需驗證動作
'REQUIRE_AUTH_ACTION' => '', //強制驗證動作
'GUEST_AUTH_ON' => false, // 開啟訪客授權
'GUEST_AUTH_ID' => 0, // 訪客 ID
'RBAC_ROLE_TABLE' => 'think_role',
'RBAC_USER_TABLE' => 'think_role_user',
'RBAC_ACCESS_TABLE' => 'think_access',
'RBAC_NODE_TABLE' => 'think_node',
在 Lib/Action/ 建立三個基底類別:
CommonAction — 共用邏輯(權限檢查、選單生成)PublicAction — 公開頁面(登入、註冊、錯誤頁),不需驗證IndexAction — 後台首頁入口,繼承 CommonAction所有後台控制器繼承 CommonAction,自動獲得權限攔截。
config.php 引入上述 RBAC 設定。CommonAction,於 _initialize() 執行權限檢查邏輯。think_node 動態生成。think_access 對應關係。USER_AUTH_TYPE=2 即時驗證會每請求查詢資料庫,高流量建議快取節點資料。ADMIN_AUTH_KEY)略過所有權限檢查,謹慎指派。name 必須與實際模組/控制器/動作名稱大小寫一致。原文出處:尛雷博客