RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。
理论上的知识就不啰嗦了,本文章将要记录我在实现RBAC权限分配的主要思路和代码,注意,代码是使用thinkPHP3.23 框架编写!
数据表设计
在进行RBAC权限功能实现时,需要创建 3 个数据表,分别是管理员表、角色表、权限表。
管理员表(admin)结构如下:
CREATE TABLE `admin` (
`id` int(10) NOT NULL AUTO_INCREMENT ,
`user` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`password` char(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`roleid` int(10) NOT NULL COMMENT '所属角色' ,
PRIMARY KEY (`id`)
)
;
角色表结构如下:
CREATE TABLE `role` (
`id` int(10) NOT NULL AUTO_INCREMENT ,
`rolename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`priid` int(10) NOT NULL COMMENT '对应权限的id' ,
PRIMARY KEY (`id`)
)
;
最后一个,权限表如下:
CREATE TABLE `privilege` (
`id` int(10) NOT NULL AUTO_INCREMENT , `priname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci