ThinkPHP6进阶教程:如何优雅地使用Auth模块进行权限验证

2024-02-04 11:36

本文主要是介绍ThinkPHP6进阶教程:如何优雅地使用Auth模块进行权限验证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

thinkphp6是一款优秀的php框架,它为我们提供了很多高效的工具和功能。其中,auth授权是一个非常强大的功能,可以帮助我们在应用程序中进行权限管理。本文将介绍如何使用thinkphp6的auth授权。

安装Auth组件

首先,我们需要安装Auth组件。在终端中执行以下命令:

composer require topthink/think-auth

安装完成后,我们需要在配置文件中添加Auth服务提供者:

// config/app.phpreturn [// ...'providers' => [// ...thinkuthServiceProvider::class,],
];

然后,我们需要执行以下命令生成Auth配置文件:

php think auth:config

配置Auth组件

Auth组件可以通过配置来实现不同的权限管理需求,下面是一个基础的配置:

// config/auth.phpreturn ['auth_on' => true,'auth_type' => 1,'auth_group' => 'auth_group','auth_group_access' => 'auth_group_access','auth_rule' => 'auth_rule','auth_user' => 'user',
];
  • auth_on:是否开启权限认证,true开启,false关闭;
  • auth_type:认证方式,1为实时认证(即每次验证权限时都重新获取权限),2为登录认证(即用户登录后验证权限);
  • auth_group:用户组数据表名;
  • auth_group_access:用户组明细关联表名;
  • auth_rule:权限规则表;
  • auth_user:用户信息表。

创建权限规则

在使用Auth授权之前,我们需要先创建一些权限规则。权限规则可以控制用户对不同资源的访问权限。我们需要在数据库中创建一个auth_rule表,然后通过添加记录的方式来创建权限规则。

// appmodelAuthRule.phpnamespace appmodel;use thinkModel;class AuthRule extends Model
{//
}

接下来,我们需要在数据库中创建auth_rule表:

CREATE TABLE `auth_rule` (`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR(100) NOT NULL COMMENT '规则',`title` VARCHAR(100) NOT NULL COMMENT '规则名称',`type` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '规则类型',`status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态',`condition` TEXT COMMENT '规则表达式',PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='权限规则表';

然后,我们可以通过以下方式添加一些权限规则:

use appmodelAuthRule;$rule = new AuthRule;
$rule->name = 'admin/user/index';
$rule->title = '管理用户';
$rule->save();$rule = new AuthRule;
$rule->name = 'admin/user/add';
$rule->title = '添加用户';
$rule->save();$rule = new AuthRule;
$rule->name = 'admin/user/edit';
$rule->title = '编辑用户';
$rule->save();$rule = new AuthRule;
$rule->name = 'admin/user/del';
$rule->title = '删除用户';
$rule->save();

创建用户组

除了权限规则外,我们还需要创建用户组。用户组是一些用户的集合,拥有相同的访问权限。我们需要在数据库中创建一个auth_group表,然后通过添加记录的方式来创建用户组。

// appmodelAuthGroup.phpnamespace appmodel;use thinkModel;class AuthGroup extends Model
{//
}

接下来,我们需要在数据库中创建auth_group表:

CREATE TABLE `auth_group` (`id` INT NOT NULL AUTO_INCREMENT,`title` VARCHAR(100) NOT NULL COMMENT '组名',`status` TINYINT(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态',PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用户组表';

然后,我们可以通过以下方式添加一些用户组:

use appmodelAuthGroup;$group = new AuthGroup;
$group->title = '管理员';
$group->save();$group = new AuthGroup;
$group->title = '普通用户';
$group->save();

创建用户组明细

现在,我们已经创建了一些权限规则和用户组。接下来,我们需要将规则分配给用户组。我们需要在数据库中创建一个auth_group_access表,然后通过添加记录的方式来创建用户组明细。

// appmodelAuthGroupAccess.phpnamespace appmodel;use thinkModel;class AuthGroupAccess extends Model
{//
}

接下来,我们需要在数据库中创建auth_group_access表:

CREATE TABLE `auth_group_access` (`uid` INT NOT NULL COMMENT '用户id',`group_id` INT NOT NULL COMMENT '用户组id',UNIQUE KEY `uid_group_id` (`uid`, `group_id`),KEY `uid` (`uid`),KEY `group_id` (`group_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='用户组明细表';

然后,我们可以通过以下方式将权限规则分配给用户组:

use appmodelAuthGroupAccess;$access = new AuthGroupAccess;
$access->uid = 1;
$access->group_id = 1;
$access->save();$access = new AuthGroupAccess;
$access->uid = 2;
$access->group_id = 2;
$access->save();$access = new AuthGroupAccess;
$access->uid = 3;
$access->group_id = 2;
$access->save();

使用Auth授权

现在,我们已经创建了一些权限规则和用户组,并将规则分配给了用户组。接下来,我们可以使用Auth授权来验证用户是否有访问权限。

// 授权验证
use thinkacadeSession;
use thinkacadeRequest;
use thinkacadeConfig;
use thinkacadeDb;
use thinkuthAuth;class BaseController extends Controller
{protected function initialize(){parent::initialize();// 如果用户未登录,则跳转到登录页面if (!Session::has('user')) {$this->redirect('/login');}$uid = Session::get('user.id');// 如果是超级管理员,则直接通过权限验证if ($uid == Config::get('admin_id')) {return true;}$auth = new Auth;$route = strtolower(Request::controller() . '/' . Request::action());if (!$auth->check($route, $uid)) {$this->error('无权限');}}
}

首先,我们需要从Session中获取用户登录信息。如果用户未登录,则跳转到登录页面。

然后,我们获取当前用户的uid。如果当前用户是超级管理员,则直接通过权限验证。

否则,我们创建一个Auth实例,并获取当前请求的路由。然后,我们使用Auth的check方法验证当前用户是否有访问权限。如果没有,则抛出一个无权限的错误。

小结

在本文中,我们学习了如何使用ThinkPHP6的Auth授权。我们使用Auth组件来实现权限管理,并创建了一些权限规则和用户组。最后,我们使用Auth授权来验证用户是否有访问权限。如果您需要更高级的权限管理功能,可以通过扩展Auth组件来实现。

这篇关于ThinkPHP6进阶教程:如何优雅地使用Auth模块进行权限验证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677361

相关文章

利用python实现对excel文件进行加密

《利用python实现对excel文件进行加密》由于文件内容的私密性,需要对Excel文件进行加密,保护文件以免给第三方看到,本文将以Python语言为例,和大家讲讲如何对Excel文件进行加密,感兴... 目录前言方法一:使用pywin32库(仅限Windows)方法二:使用msoffcrypto-too

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型