auth 认证相对于rbac来说,更加灵活方便,防止后面忘记来做做记录。
首先需要创建表 4张
1、auth_rule
它是所有需要认证的权限点集合,需要把认证的权限记录到数据库。
DROP TABLE IF EXISTS `hskj_auth_rule`;
CREATE TABLE `hskj_auth_rule` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`title` varchar(255) NOT NULL DEFAULT '',
`type` tinyint(1) NOT NULL DEFAULT '1',
`status` tinyint(1) NOT NULL DEFAULT '1',
`condition` char(100) NOT NULL DEFAULT '',
`add_time` datetime DEFAULT NULL,
`is_top` tinyint(1) DEFAULT NULL,
`pid` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=62 DEFAULT CHARSET=utf8;
2、auth_group 角色表 该角色所拥有的权限点,即在auth_rule中记录的权限点id
DROP TABLE IF EXISTS `hskj_auth_group`;
CREATE TABLE `hskj_auth_group` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` char(100) NOT NULL DEFAULT '',
`status` tinyint(1) NOT NULL DEFAULT '1',
`rules` varchar(10000) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
3、user 用户表(这个就不用贴出来了吧)
4、auth_group_access 用户和角色中间表 它记录该用户对应的角色 (可以有多个角色,此处我的用户只设置了一个角色)
DROP TABLE IF EXISTS `hskj_auth_group_access`;
CREATE TABLE `hskj_auth_group_access` (
`uid` mediumint(8) unsigned NOT NULL,
`group_id` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`uid`),
UNIQUE KEY `uid_group_id` (`uid`,`group_id`),
KEY `uid` (`uid`),
KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
thinkphp config 配置
'AUTH_CONFIG'=>array('AUTH_ON' => true, //认证开关'AUTH_TYPE' => 1, // 认证方式,1为时时认证;2为登录认证。'AUTH_GROUP' => 'hskj_auth_group', //用户组表'AUTH_GROUP_ACCESS' => 'hskj_auth_group_access', //用户与用户组关系表'AUTH_RULE' => 'hskj_auth_rule', //权限表'AUTH_USER' => 'hskj_user'//用户表),
需要有个基类控制器里面加上判断权限点条件(我加入了模块判断,即Home/Index/index)
if(!$auth->check(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME,session('uid'))){
$this->redirect('Index/main', array('cate_id' => 2),1,
'<script>alert("对不起,您没有权限使用该菜单");</script>');}
session('uid') 是登录之后记录的用户id