thinkPHP的RBAC權限管理

thinkphp自帶一個權限類:RBAC.class.php,裏面有生成表的create table語句,也就是它的數據庫設計,還有一些方法,好比getAccessList(),能夠根據管理員ID號得到權限節點。php

一、涉及到的表有五個,爲了方便理解,能夠總結爲:node

用戶表(user):顧名思義,就是用戶了,好比admin、張3、李4、王五thinkphp

角色表(role):顧名思義,就是定義好的角色,好比財務管理員、文章管理員、產品管理員數據庫

用戶角色關係表(user_role):顧名思義,就是將用戶和角色對應起來的表,看它的表結構,只有role_id(角色id)和user_id(用戶id)兩個字段
節點表:這個表比較特殊一點,直接列出字段和說明比較好理解
數組

字段 id name title status remark sort pid level
解釋

節點名稱,通常爲:項目名稱(入口文件中定義的項目名稱)、Action(模塊)名稱、Function(方法)名稱 session

若是系統存在分組,那麼須要填寫,分組名稱,如:Home、Admin數據庫設計

節點標題ide

狀態,1,0網站


註釋spa

排序

父ID,頂級:0

等級:一、二、3…

例子 1
Information


信息資訊管理

1

中心門戶網站

NULL
1
2

角色節點表(access):權限控制,也叫權限表,就是該角色(role)能控制哪些節點(node)。level字段對應node表的level字段。

這樣就好理解了,其實就是用戶、角色、節點三塊。

先定義某個角色有權操縱某些節點,就是role表(角色)和node表(節點)和access表(權限)三個表的關係,這是核心部分,access又是核心中的核心。

而後,用戶表能夠單獨和角色表掛鉤,這就是user表和role表和user_role表的關係。

這樣,就間接定義了哪些用戶能夠操縱哪些節點(模塊)。
二、實際運行的時候,用戶的全部能夠操做的節點,能夠記錄到session當中,好比在初始化方法中寫下這一句:

$_SESSION[‘rbac’]=RBAC::getAccessList($adminId);

這樣打印session的時候,能夠看到

[rbac] => Array

(

[ADMIN] => Array

(

[INFORMATION] => Array

[ADD] => 1

[MODIFY] => 2

[DEL] => 3

[PRODUCT] => Array

...

相似這樣的數組結構。

最後須要注意的一點是RBAC的配置語句,能夠到網上或者官網查看相關的例子。

相關文章
相關標籤/搜索