ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 基于角色的权限认证-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. 初始化管理不有被删除(结合实际情况) ### 特殊处理