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权限控制器