Auth权限简介
Thinkphp系统提供了完善的权限控制方法-Auth权限认证,可以对用户的管理权限进行很好的控制。
Auth权限认证的基本原理是由四张表进行逻辑关联达到权限控制。这四张表分别是:
1.用户表 user 存放用户的信息
2.规则表 auth_rule 存放具体规则,每条规则是由规则名对应控制器方法,比如 新增文章 - Article/add
3.用户组表auth_group 存放权限管理组,每条管理组对应多个规则
4.用户组明细表 auth_group_access 存放用户与管理组的关联。
通过以上四张表之间的相互关联,就可以对每个用户的具体访问权限进行控制。
如何创建Auth权限认证规则与管理组:
在ThinkPHP/Library/Think目录的 Auth.class.php 文件中,可以详细看到Auth的介绍。下面的表的创建方法就是摘取此文件。
1.创建规则表、用户组表及用户组明细表
//数据库
-- ----------------------------
-- think_auth_rule,规则表,
-- id:主键,name:规则唯一标识, title:规则中文名称 status 状态:为1正常,为0禁用,condition:规则表达式,为空表示存在就验证,不为空表示按照条件验证
-- ----------------------------
DROP TABLE IF EXISTS `tp_auth_rule`;
CREATE TABLE `tp_auth_rule` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(80) NOT NULL DEFAULT '',
`title` char(20) NOT NULL DEFAULT '',
`type` tinyint(1) NOT NULL DEFAULT '1',
`status` tinyint(1) NOT NULL DEFAULT '1',
`condition` char(100) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group 用户组表,
-- id:主键, title:用户组中文名称, rules:用户组拥有的规则id, 多个规则","隔开,status 状态:为1正常,为0禁用
-- ----------------------------
DROP TABLE IF EXISTS `tp_auth_group`;
CREATE TABLE `tp_auth_group` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` char(100) NOT NULL DEFAULT '',
`status` tinyint(1) NOT NULL DEFAULT '1',
`rules` char(80) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- ----------------------------
-- think_auth_group_access 用户组明细表
-- uid:用户id,group_id:用户组id
-- ----------------------------
DROP TABLE IF EXISTS `tp_auth_group_access`;
CREATE TABLE `tp_auth_group_access` (
`uid` mediumint(8) unsigned NOT NULL,
`group_id` mediumint(8) unsigned NOT NULL,
UNIQUE KEY `uid_group_id` (`uid`,`group_id`),
KEY `uid` (`uid`),
KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
注意:表名前缀tp_改为自己的表前缀
2.修改Auth.class.php文件中关于用户表的两处内容
第一处是默认配置
//默认配置 protected $_config = array( 'AUTH_ON' => true, 'AUTH_TYPE' => 1, 'AUTH_GROUP' => 'auth_group', 'AUTH_GROUP_ACCESS' => 'auth_group_access', 'AUTH_RULE' => 'auth_rule', 'AUTH_USER' => 'user' // 注意这里改为你的用户表名称,不含前缀 );
第二处是用户表的id
/**
* 获得用户资料,根据自己的情况读取数据库
*/
protected function getUserInfo($uid) {
static $userinfo=array();
if(!isset($userinfo[$uid])){
//下面'id'=>$uid,原来是'uid'=>$uid,这里要修改
$userinfo[$uid]=M()->where(array('id'=>$uid))->table($this->_config['AUTH_USER'])->find();
}
return $userinfo[$uid];
}
3.规则控制器与规则管理组控制器
规则表等创建完成以后,我们需要创建两个控制器及其方法,一个是RuleController.class.php用来增删改查规则,另一个是GroupController.class.php用来增删改查用户组(也就是规则管理组)。
完成以上表与规则创建,下一步就是对其他控制器进行权限认证 Auth权限控制器
