1. 简介
RBAC是Role-Based Access Control的首字母,即基于角色的访问控制,是最简单的权限管理解决方案。它对权限的控制精度一般为节点。
基本模型为用户-角色-权限(节点),用户和角色之间、角色和节点之间都是多对多的关系。
实现原理:
在用户登录的时候,将用户拥有的权限(可访问的模块、控制器和方法),保存到session中;
在用户访问某个页面或按钮时,进行权限的验证,如果没有权限,则禁止访问。
2. 基本用法
以ThinkPHP3.2.3为例,进行简单介绍。
RBAC类文件为ThinkPHP\Library\Org\Util\Rbac.class.php,默认的认证方式为登录验证。
建立五张数据表。
# 用户表
CREATE TABLE IF NOT EXISTS `think_user` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',
`username` varchar(20) NOT NULL DEFAULT '' COMMENT '用户名',
`password` char(32) NOT NULL DEFAULT '' COMMENT '密码',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态:0禁用,1正常',
`login_time` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最近一次登录时间',
`login_ip` int(11) NOT NULL DEFAULT '0' COMMENT '最近一次登录ip',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户表';
# 角色表(即用户组表)
CREATE TABLE IF NOT EXISTS `think_role` (
`id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id',
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
`pid` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '父角色的id',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态:0禁用,1正常',
`remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`),
KEY `pid` (`pid`),
KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='角色表(即用户组表)';
# 角色用户表
CREATE TABLE IF NOT