# 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
~~~
- 空白目录
- thinkcmf的权限管理
- thinkcmf+unicmf添加页面
- Thinkphp5做后台 Uni-app做前台解决跨域问题
- 组件
- h5跨域-uniapp
- thinkphp5 auth 教程
- thinkphp5Auth类
- uniapp添加与编辑的差别
- 常见的请求方式
- uni 单选回显数据_uniapp 页面跳转传值和接收
- uni-app 单选/多选/滑动 demo
- 关于uniapp checkbox多选框如何传值传数据
- uniApp 多选框checkbox ,判断是否选中
- uniapp添加复选框和获取复选框的值
- uni-app中全选多选单选
- uniapp多选框CheckBox 数据接收
- uniapp下拉列表单选框复选框实战demo(编辑或详情页)
- uni-data-CheckBox-OK
- js 字符串数组转换成数字数组
- js把字符串转为数组对象
- js中数组对象字符串的相互转换
- JS怎么把字符串数组转换成整型数组
- 小程序开发
- tp5.1跨域请求
- uniapp-h5跨域
- 新增
- order
- uni-app中调取接口的三种方式与封装uni.request()
- uView-checkbox
- 给u-view的u-select赋值
- uView-下拉框、复选框、单选框 数据发送及接收
- CURD操作
- thinkphp5.1增删改查
- TP5.1添加数据成功之后返回自增主键id
- Thinkphp实战之Request默认值except only 以及过滤参
- uni-app跨域解决方案
- thinkphp5.1+uni-app接口开发中跨域问题解决方案
- tp6 + uniapp 前后端跨域解决方案
- uniapp-token相关
- uniapp request请求封装包含token兼容多端,简单易用
- CORS.php
- ThinkPHP6 API开发前后端分离用户信息保存在后端的方法
- thinkphp的jwt(JSON Web Token)身份验证
- thinkphp6增删改查
- PHP模拟GET,POST请求
- php模拟get、post发送请求的6种方法
- thinkphp6
- uniapp封装网络请求
- thinkphp6搭建后端api接口jwt-auth
- uniapp实现APP微信登录流程
- [uni-app] 中保持用户登录状态
- 详解vue中localStorage的使用方法
- vue 实现通过vuex 存储值 在不同界面使用
- dispatch:异步操作,数据提交至 actions ,可用于向后台提交数据
- ThinkPHP6.0 + Vue + ElementUI + axios 的环境安装到实现 CURD 操作
- tp6错误集
- TP6 模型插入/添加数据,自动插入时间(自动时间戳)
- 手机不开机维修思路
- thinkphp6解决vue跨域问题
- 从0基础获取短视频去水印解析接口制作
- thinkphp5 删除缓存
- thinkPHP,怎么把json文件里面的数据导入数据库
- 数字转字符php
- php – 直接用curl下载远程文件
- thinkphp – 直接用curl下载远程文件
- apiAdmin安装
- echart
- thinkphp开发小程序推广分享带参数二维码生成
- php同比增加函数
- PHP获取同比上周、上一个月,上一个季度,去年时间区间
- “前3秒”金句100例,赶紧收藏起来!
- PHP配合微信公众号生成推广二维码
- thinkphp5+php微信公众号二维码扫码关注推广二维码事件实现
- 获取当前时间上一周的开始时间和结束时间
- TP6 查找指定工作日
- PHP 获取当天、近一周、本周、上月、本月、本季度、上季度时间方法大全
- php获取今日、昨日、本周、本月 日期方法
- Tp5+mysql按年季度月周日小时查询时无数据的时间段补0方法
- mysql按天统计的时候,该天没有数据也要统计为0
- 列出一星期的日期 无数据补0
- thinkphp6本周 上周 周一 周末日期
- 补全日期 无数据补0
- php+pv统计代码实现,Laravel 10 行代码实现简单的网站 pv uv 统计
- 通过API获取ip地址以及城市和运营商
- 获取访客信息
- 13行代码实现微信小程序设置概率触发激励视频阅读文章
- uniapp 微信小程序 获取场景值和场景值个性化参数
- 微信小程序分享小程序码的生成(带参数)以及参数的获取
- 小程序推广分享带参数二维码生成
- uniapp微信小程序生成对应页面二维码
- uniapp获取当前页面url
- uniapp微信小程序--微信登录
- 微信小程序,生成小程序码中scene参数的存放和获取问题
- uni-app 微信小程序生成二维码带参数
- uni-app 微信小程序如何把图片保存到本地相册?
- thinkPHP5使用assign()传递富文本,前端解析成HTML标签
- tp6解析编辑器里面的html标签原样输出
- PHP判断url链接是否被百度收录
- 微擎安装模块时提示 Failed to connect to we7.rewlkj.com port 80: Timed out
- 小程序码生成
- thinkphp开发小程序推广分享带参数二维码生成0
- tp3.2伪静态
- apiadmin安装教程-2022.8更新
- autojs事件代码
- uuuu
- thinkphp6: API 多版本控制