# 基于角色的权限认证-AUTH
> 在ThinkPHP早基的版本(TP3.2)中,自带了AUTH权限认证,但是TP5.0没有内置。所以在TP5.0如果要使用的话,可以在TP3.2的基础上,将AUTH类进行修改使用支持TP5即可。不过大家在使用时一般不需要自行修改,因为有网友已经修改好后,分享了出来,大家可以通过`Composer`进行扩展。具体的扩展方式和插件扩展一样。
## 安装think-auth扩展
> 打开[Composer软件仓库(https://packagist.org/)](https://packagist.org/),搜索`think-auth`,在这里会看到有限多的网友分享,大家可以找一个下载量比较高的使用。
~~~
composer require 5ini99/think-auth
~~~
> 如果安装过程中出现了异常,要确认一下当前使用的`源`是否可用。
## 认识think-auth
安装后,在`vendor`目录下会多出一个扩展
![](https://box.kancloud.cn/8b9e85363654f652d82d4bedf8104eb8_340x304.png)
大家可以打开`README.md`,该文件中有该扩展的详细的介绍以及使用方法。
> 该扩展的的核心只有一个文件,就是`Auth.php`。
## auth的原理
Auth权限认证是按规则进行认证。
在这里需要用到四张表
* 管理员表(系统自带)
* 规则表(think\_auth\_rule)
* 用户组表(think\_auth\_group)
* 用户组明细表(think\_auth\_group\_access)
我们在规则表中定义权限规则, 在用户组表中定义每个用户组有哪些权限规则,在用户组明细表中定义用户所属的用户组。
## 四张表之间的关系
![](https://box.kancloud.cn/b7b30e4e6c988381a6448dda4140a0ff_769x580.png)
> 明白了四张表的关系后,接下 就是关于四张表数据的录入。录入的方式就是对这四张表的增删改查操作。
> 在这里要注意,`auth_rule`表中少一个`type`字段。
## 权限认证相关表录入的注意事项
1. 录入规则表中的`name`字段时,要注意控制器和方以之间的分附符,另外这里还可以带上模块名。
2. 在设置管理员角色时,有两种方案,一种是`一对多`和`多对多`。即一个管理员只属于一个角以,一上是一个管理员可以属于多个角色。
3. 在删除管理和删除 角色时,要同时删除中间表中相关的数据。
> 到目前为止,还没有用到`auth`权限扩展类。
## 权限验证
### 引 入`auth`扩展类库
> 在引主时一 定要注意其命名空间,如果不清楚的话,可以打开`Auth.php`查看,也可以打 扩展目录下的`composer.json`来查看。通过这两种方式都可以查出去命名空间为:`think\auth`,所以在引入时,要使用如下方式引入:
~~~
<?php
.....
use think\auth\Auth;
.....
~~~
### 权限认证的实现
> 正确引入类库之后,接下 就是实 例化`auth`类,并调和其`check`来实现权限的认证。另外,验证代码要写在一个公共的控制器和方法中。
> 具体的代 如下:
~~~
$controller = request()->controller();
$action = request()->action();
$auth = new Auth();
if(session('uid')!==10){//初始化管理员不进行验证
if(!$auth->check($controller . '-' . $action, session('uid'))){
$this->error('你没有权限访问','admin/index/index');
}
}
~~~
### 根据用户id获取用户组,返回值为数组
getGroups($uid)
### 获得权限列表*
getAuthList($uid, $type)
### 获取权限组对应的权限列表*
getGroupAuthList($gid, $type = 1)
### 获得用户资料,根据自己的情况读取数据库*/
getUserInfo($uid)
### 角色状态
> Auth权限类,支持对角色的状态进行设置。这样可以临时关闭某一角色的所有权限。
### 权限状态
> 可以单独控制某一权限的状态。
### 初始化管理员
> 为系统设置一个 始化管理员是十分必要的,它的主要作用为系统 管理员分配权限。
**特点:**
* * *
1. 不需要进行验上,拥有系统的所有权限
2. 初始化管理不有被删除(结合实际情况)
### 特殊处理
- 课程介绍
- thinkphp5.0
- 安装
- 开发规范
- 目录结构
- 配置参数
- 系统常量
- tp5自带的函数
- 助手函数
- 扩展类库
- 基本类库
- Workerman
- think-queue
- 验证码
- 图片
- 权限认证
- 课前准备
- 数据库设计
- 模块设计
- 管理员管理
- 添加
- 编辑
- 删除和批量删除
- 列表页
- 实列
- 权限管理
- 操作日志
- 基于行为的日记录
- 行为日志的扩展
- 助手类库
- 自建函数
- 将数组转成uri字符串
- 获取当前服务器的IP
- curl-post
- 截取文字中间的字符串
- 检查中文姓名
- 省市区分别截取
- 抽奖概率问题
- 短信邮箱模板替换
- 生成csv
- PHP 图片转base64
- 银行卡验证
- json返回接口封装
- 无限极分类
- 病毒
- xml和数组互转
- xml转成数组
- 数组转xml
- tp控制器相关
- 获取thinkph5下控制器和方法名
- 后台查询的简单封装
- 网址信息
- 获取网站logo
- 判断url是否存在
- 获取title
- 判断远程文件是否存在
- 获取页面所有链接
- 过滤
- 截取
- 时间
- 获取服务器信息
- 根据id生成唯一邀请码
- 随机颜色
- 数组字符串互换
- 创建多级目录
- 懒人查询
- 时间和时间戳转换
- 房间id生菜
- 获取需要的数组元素
- 文件和文件夹
- 文件类库
- 文件夹
- 七牛云
- 七牛云运用场景
- 七牛云使用实例
- 邮箱
- 邮箱验证
- 邮箱发送
- 数据库
- 数据库在thinkphp中的补充方法
- 备份和安全
- sql执行
- 数据库备份2
- 时间日历
- 时间格式化
- 日历
- 图片相关
- 自动获取图片主题颜色
- 获取html中的图片路径
- 获取图片场景
- 获取图片实践
- 图片处理类
- 图片处理场景
- 图片处理实践
- 数据验证分析
- 身份证相关
- 新闻
- 自建类库
- 简易分类库
- php 压缩CSS代码
- 身份证
- 分词和抽词
- 分词应用场景
- 分词实践
- 中文转拼音
- 中文转拼音场景
- 中文转拼音实践
- 二维码操作
- 二维码场景
- 二维码实践
- 短地址
- PHPWord
- 插件化
- 插件扩展库
- 插件列表
- 插件安装和卸载
- 插件实践
- 插件的离线安装
- 计划任务
- 计划任务安装
- 计划任务实践
- 定时器
- 注册登录
- 普通登录注册
- 第三方登录注册
- jwt接口登录注册
- 短信
- 飞鸽短信
- 阿里短信
- 消息队列
- 网站地图
- 全站静态化
- 缓存
- 文件导出
- PDF生成
- phpword
- PHPExcel
- 其他类库
- 百度
- 百度语音
- 快递
- 跨域问题
- 宝塔
- 搜索记录