首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP RBAC 權限控制官方範例深度解析

     編輯:PHP 綜合知識

ThinkPHP 內建 RBAC(Role-Based Access Control)實作範例,文檔較簡略。本文拆解核心資料表結構、關鍵配置項、目錄規劃,幫助開發者快速建立權限系統。

核心資料表結構

1. think_node(節點表)

儲存所有需管控的模組、控制器、動作:

欄位說明
id主鍵
name節點名稱(專案/模組/控制器/動作)
pid父節點 ID(樹狀結構)
level層級:1=專案、2=模組、3=控制器、4=動作
status啟用狀態(1=啟用)

建立順序範例:

  1. 專案名:pid=0, level=1
  2. 模組(如 Index):pid=專案ID, level=2
  3. 動作(如 index):pid=模組ID, level=3

此表亦可直接生成後台導航選單。

2. think_role(角色表)

定義角色群組(如:超級管理員、編輯、會員)。

3. think_user(使用者表)

系統使用者,欄位含 username、password、status 等。表名可自訂,需在配置對應。

4. think_role_user(角色-使用者關聯表)

多對多關聯,一個使用者可屬多個角色。

5. think_access(權限存取表)

對應 角色 ↔ 節點,決定某角色是否可存取某節點。
建議補充 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,自動獲得權限攔截。

實作流程摘要

  1. 建立資料表(可用官方 SQL 檔匯入)。
  2. 配置 config.php 引入上述 RBAC 設定。
  3. 建立 CommonAction,於 _initialize() 執行權限檢查邏輯。
  4. 後台選單讀取 think_node 動態生成。
  5. 角色管理介面維護 think_access 對應關係。

常見坑點

  • USER_AUTH_TYPE=2 即時驗證會每請求查詢資料庫,高流量建議快取節點資料。
  • 超級管理員(ADMIN_AUTH_KEY)略過所有權限檢查,謹慎指派。
  • 節點名稱 name 必須與實際模組/控制器/動作名稱大小寫一致。

原文出處:尛雷博客

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved