ThinkPHP RBAC数据库结构简介

ThinkPHP 中的RBAC用到了5个表

think_user (用户表)
think_role (用户分组表)
think_node (操作节点)
think_role_user (用户和用户分组的对应)
think_access (各个操作和用户组的对应)

sql语句如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-- 表的结构 `think_access`此表为五张表中的权限表
CREATE TABLE IF NOT EXISTS `think_access` (
  `role_id` SMALLINT(6) UNSIGNED NOT NULL,
  `node_id` SMALLINT(6) UNSIGNED NOT NULL,
  `level` tinyint(1) NOT NULL,
  `pid` INT(11) DEFAULT NULL,
  KEY `groupId` (`role_id`),
  KEY `nodeId` (`node_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- 表的结构 `think_node`此表为五张表中的节点表
CREATE TABLE IF NOT EXISTS `think_node` (
  `id` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(20) NOT NULL,
  `title` VARCHAR(50) DEFAULT NULL,
  `pid` SMALLINT(6) UNSIGNED NOT NULL,
  `level` tinyint(1) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `level` (`level`),
  KEY `pid` (`pid`),
  KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
-- 表的结构 `think_role`此表为五张表中的用户组表
CREATE TABLE IF NOT EXISTS `think_role` (
  `id` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
-- 表的结构 `think_role_user`此表为用户和组对应关系表
CREATE TABLE IF NOT EXISTS `think_role_user` (
  `role_id` mediumint(9) UNSIGNED DEFAULT NULL,
  `user_id` CHAR(32) DEFAULT NULL,
  KEY `group_id` (`role_id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- 表的结构 `think_user`此表为用户表
CREATE TABLE IF NOT EXISTS `think_user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(100) NOT NULL,
  `password` CHAR(32) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

表Think_access:
Role_ID Node_id pid level
用户组的编号 节点表 节点表中的父ID项 节点表中的等级项
注:如果用户组id和对应的节点id存在这张表中,就表示用户所在的用户组有权限进行对应的操作权限。

表Think_node
id name title pid level
节点编号 节点名称 节点描述 父类编号 级别
节点编号,用来产生关联关系,主键,自增方便索引
节点名称,模块或者动作的名字(严格区分大小写)
节点描述,方便管理员认识和了解
注① :
1)如果是项目名称则项目是顶级的,它上面没有父路径编号(pid),因此pid则为0;例如,网站下有一个Admin项目,它是顶级的。因此没有父路径编号(pid),此处应填0,如果它为第一次插入数据库的,它的id则为1。全字段插入数据库应为:
id name title pid level
1 Admin Admin项目节点 0 1
2)如果某项目下有一个模块。则父路径编号(pid)则为该某块所在的项目编号(id)。例如,Admin下面有一个模块为User,它是第二个插入数据库的。因此,模块的父路径(pid)应填1。全字段插入数据库应为:
id name title pid level
2 User User模块节点 0 2
3)如果在某模块下面有三个动作(或成员方法),分别Index(显示)、insert(插入)、delete(删除),它们三个的父路径为该模块的编号。例如User模块下有Index、insert、delete三个动作或成员方法,它们分别是第三,四,五次插入数据库的。他们的父路径编号(pid)应填2。全字段插入数据库应为:
id name title pid level
3 User User模块下显示动作 0 2
4 Index User模块下插入动作 0 2
5 insert User模块下删除动作 0 2

表think_role
id name
组的编号(主键) 组的名字
注:此表中可以插入父路径编号(pid)产生组的包含关系。对应的父路径编号(pid)为所属组的编号(id)。

表think_user
id username password
用户编号(主键,int类型) 用户名(varchar类型) 密码(char类型32位)
注:id在下一张表中结合think_role产生用户与组的关联关系。建议username设为唯一的,password采用32位md5加密。

表think_role_user
group_id User_id
组编号(主键,int类型) 用户编号(主键,int类型)
注:用户编号(user_id)对应哪一个group_id,则哪个用户就属于哪一个组。可以让同一个用户对应多个组。就意味着,一个用户具有多个组的属性和操作权限。

本文固定链接: https://www.apieye.com/503.html | APIEYE

该日志由 Jazzy 于2012年12月04日发表在 PHP 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: ThinkPHP RBAC数据库结构简介 | APIEYE
关键字: , ,

ThinkPHP RBAC数据库结构简介:等您坐沙发呢!

发表评论

您必须 [ 登录 ] 才能发表留言!