# thinkphp5 auth 教程
1.表结构
~~~
DROP TABLE IF EXISTS `think_auth_group`;
CREATE TABLE `think_auth_group` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` char(100) NOT NULL DEFAULT '' COMMENT '用户组中文名称',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态 : 1为正常,0为禁用',
`rules` char(80) NOT NULL DEFAULT '' COMMENT '规则ID (这里填写的是 tp_auth_rule里面的规则的ID)',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 COMMENT='用户组表';
DROP TABLE IF EXISTS `think_auth_rule`;
CREATE TABLE `think_auth_rule` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '规则id',
`name` char(80) NOT NULL DEFAULT '' COMMENT '规则名称,格式 为【模块名/控制器名/方法名】或【自定义规则】,多个规则之间用,隔开即可',
`title` char(20) NOT NULL DEFAULT '' COMMENT '规则中文名称',
`type` tinyint(1) NOT NULL DEFAULT '1'
COMMENT '如果type为1,condition字段就可以定义规则表达式。如定义{score}>5 and {score}<100 表示用户的分数在5-100之间时这条规则才会通过。(默认为1)',
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1为正常,0为禁用',
`condition` char(100) NOT NULL DEFAULTCOMMENT '规则表达式,不为空and type字段=1 会按照条件验证 ',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `think_auth_group_access`;
CREATE TABLE `think_auth_group_access` (
`uid` mediumint(8) unsigned NOT NULL COMMENT '用户id',
`group_id` mediumint(8) unsigned NOT NULL COMMENT '组id',
UNIQUE KEY `uid_group_id` (`uid`,`group_id`),
KEY `uid` (`uid`),
KEY `group_id` (`group_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT ='用户组明细表';
CREATE table think_user(
id mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
name varchar(99) ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT ='用户表';
~~~
2.介绍
~~~
在 tp_auth_rule里面添加一个或多个验证规则用来验证你的访问权限
(Admin/Article/Add)增加文章的权限
(Admin/Article/Edit)修改文章的权限
(Admin/Article/Delete)删除文章的权限
Ps:这3个规则可以合并成一个规则,合并成一个规则的话就是:
(Admin/Article/Add,Admin/Article/Edit,Admin/Article/Delete);
也可以写成(Article-Add-Edit-Delete)这样的 意思是拥有文章的增删改权限
~~~
3.数据录入
~~~
-- id为1: Admin/Article/Add 增加文章的权限
-- id为2: Admin/Article/Edit 修改文章的权限
-- id为3: Admin/Article/Delete 删除文章的权限
-- id为4: Article-Add-Edit-Delete 拥有文章的增删改权限
insert into think_auth_rule (name,title)
select 'Admin/Article/Add','增加文章的权限';
insert into think_auth_rule (name,title)
select 'Admin/Article/Edit','修改文章的权限';
insert into think_auth_rule (name,title)
select 'Admin/Article/Delete','删除文章的权限';
insert into think_auth_rule (name,title)
select 'Article-Add-Edit-Delete','拥有文章的增删改权限';
-- 信息录入部门的 rules需要的规则为: 1,2,3
-- 信息审核部门需要的是:2,3
-- 信息管理部门需要的是 4
INSERT into think_auth_group (title,rules)
select '信息录入部门','1,2,3';
INSERT into think_auth_group (title,rules)
select '信息审核部门','2';
INSERT into think_auth_group (title,rules)
select '信息管理部门','4';
-- 录入用户信息
insert into think_user (name)
select '小红' union select '小明' union select '小张' union select '小李'
-- 下面分配权限:
-- 小红和小明是信息录入部门的:
-- 那么tp_auth_access如下:
-- uid为 1 的小红 所属认证部为 1(1也就是认证组表中的信息录入部门,拥有增加、修改、删除的权限)
-- uid为 2 的小明 同小红一个级别(功能一样)
-- uid为 3 的小张 所属认证部为 2 (2也就是认证组表中的信息审核部,拥有修改、删除的权限)
-- uid为 4 的小李 所属认证部为 3 (3也就是认证表中的信息XX部 拥有信息的 增加、修改、删除的权限)
INSERT into think_auth_group_access
select 1,1
UNION
select 2,1
union
select 3,2
UNION
select 4,3
~~~
4.权限认证类基本使用
~~~
1,是对规则进行认证,不是对节点进行认证。用户可以把节点当作规则名称实现对节点进行认证。
$auth=new Auth(); $auth->check('规则名称','用户id');
2,可以同时对多条规则进行认证,并设置多条规则的关系(or或者and)
$auth=new Auth(); $auth->check('规则1,规则2','用户id','and')
第三个参数为and时表示,用户需要同时具有规则1和规则2的权限。 当第三个参数为or时,表示用户值需要具备其中一个条件即可。默认为or
3,一个用户可以属于多个用户组(think_auth_group_access表 定义了用户所属用户组)。我们需要设置每个用户组拥有哪些规则(think_auth_group 定义了用户组权限)
4,支持规则表达式。
在think_auth_rule 表中定义一条规则时,如果type为1, condition字段就可以定义规则表达式。 如定义{score}>5 and {score}<100 表示用户的分数在5-100之间时这条规则才会通过。
~~~
6.auth 配置
~~~
Ps:在使用auth之前,要先配置下auth所用的配置项:
如果你没修改auth_rule,auth_group,auth_group_access表名称的话,只要配置你的会员表即可。在配置项中增加以下配置项:
//Auth配置
'auth' => array(
// 用户组数据表名
//'auth_group' => 'tp_group',
// 用户-用户组关系表
//'auth_group_access' => 'tp_group_access',
// 权限规则表
//'auth_rule' => 'tp_rule',
// 用户信息表
'auth_user' => 'think_user'
),
~~~
7.开始测试
~~~
$auth = new Auth();
/*
验证单个条件
验证 会员id 为 1 的 小红是否有 增加信息的权限
check方法中的参数解释:
参数1:Admin/Article/Add 假设我现在请求 Admin模块下Article控制器的Add方法
参数2: 1 为当前请求的会员ID
*/
$check = $auth->check('Admin/Article/Add','1');
dump($check); //返回值true,代表有此权限
//检查用户id号等于3的,是否有此权限
$check = $auth->check('Admin/Article/Add','3');
dump($check); //返回值false,没有此权限
/*
同时验证多个条件
验证 会员id 为 1 的小红是否有增加信息,修改信息 和一个不存在的规则 的权限
参数解释:
参数1:多条规则同时验证 , 验证是否拥有增加、修改、删除的权限
参数2:当前请求的会员ID
*/
$check = $auth->check('Admin/Article/Add,Admin/Article/CF','1');
dump($check); // ps :CF是一个不存在的规则为什么会返回真呢? 因为check方法 第5个参数默认为 or 也就是说 多个规则中只要满足一个条件即为真
$check = $auth->check('Admin/Article/Add,Admin/Article/CF','1','and');
dump($check); // false
~~~
- tp5
- thinkphp5Auth教程
- thinkphp5Auth类
- thinkphp5钩子详解
- 多语言
- 日常函数记录
- register_shutdown_function
- number_format
- call_user_func
- call_user_func_array
- parse_str
- php数组
- chdir
- strtr
- pathinfo
- version_compare
- func_get_args
- stristr
- 常用环境变量
- php字符串操作
- php文件操作
- php时间操作
- phpcli
- php 替换
- php错误函数
- mysql
- from_unixtime
- 日期类型
- mysql 优化
- if
- 常用类
- 前端
- Seaslog日志
- composer
- 大型网站提速关键技术
- php插件机制
- 微信
- 每天一个linux
- memcache笔记
- 昂捷ERP笔记
- redis
- sphinex
- 我的学习路径
- php技术杂项
- php反射
- php闭包
- php正则
- apache 重写规则
- php异常处理
- php错误处理
- php ob缓存
- php 解析xml
- php curl介绍
- lamp
- lnmp
- http
- http缓存控制
- php命令行
- svn
- git
- mssql
- xml