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的配置语句,能够到网上或者官网查看相关的例子。