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组件来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668021.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-行为型模式(上)

行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为&…

Docker 搭建mysql 集群(二)

PXC方案 很明显 PXC方案在任何一个节点写入的数据都会同步到其他节点,数据双向同步的(在任何节点上都可以同时读写) 创建MySQL PXC集群 1 安装PXC镜像 docker pull percona/percona-xtradb-cluster:5.7.21 2 为PXC镜像改名 docker tag pe…

如何选择旅游路线,使得假期旅游路费最少?

旅行是许多人的热爱,但是在规划一个完美的假期时,找到最经济的路线常常是一个挑战。这里就需要引入一个著名的优化问题——旅行商问题。本文将介绍TSP的基础知识,并使用MTZ消除子环方法优化一个简单的TSP问题的示例。 旅行商问题简介 TSP&a…

用友U8 Cloud ReportDetailDataQuery SQL注入漏洞复现(QVD-2023-47860)

0x01 产品简介 用友U8 Cloud 提供企业级云ERP整体解决方案,全面支持多组织业务协同,实现企业互联网资源连接。 U8 Cloud 亦是亚太地区成长型企业最广泛采用的云解决方案。 0x02 漏洞概述 用友U8 cloud ReportDetailDataQuery 接口处存在SQL注入漏洞,攻击者未经授权可以访…

自然语言nlp学习五

6-10 文本生成--介绍_哔哩哔哩_bilibili 在自然语言处理(NLP, Natural Language Processing)领域,“sequence”通常是指一个有序的数据集合,它由一系列元素按照特定顺序排列而成。这些元素可以是单词、字符、句子或其他文本单位。…

NLP_语言模型的雏形N-Gram

文章目录 N-Gram 模型1.将给定的文本分割成连续的N个词的组合(N-Gram)2.统计每个N-Gram在文本中出现的次数,也就是词频3.为了得到一个词在给定上下文中出现的概率,我们可以利用条件概率公式计算。具体来讲,就是计算给定前N-1个词时&#xff0…

Adobe Illustrator CEP插件开发入门指南

引言 Adobe Creative Cloud(创意云)中的Illustrator作为一款全球领先的矢量图形设计软件,为设计师提供了丰富的功能和无限的创作可能性。为了进一步增强其功能并满足个性化工作流程需求,Adobe引入了Common Extensibility Platform…

【ROS机器人系统】实验1 熟悉ROS操作系统、熟悉ROS通信架构

文章目录 实验1 熟悉ROS操作系统、熟悉ROS通信架构1、实验目的2、实验设备3、实验内容3.1 安装ROS3.2 ROS常用指令以及小海龟示例roscore命令rosrun命令rosnode 命令roscd 命令rostopic 命令 动手实现1:rosservice 命令roslaunch 命令 动手实现2:动手实现…

免费代理IP的弊端有哪些?使用代理IP前要这样哪些事项?

随着互联网的普及,越来越多的人开始需要使用代理IP来保护自己的隐私或突破网络限制。然而,免费代理IP并非完美的解决方案,它们也存在一些弊端。在本文中,我们将探讨免费代理IP的弊端以及使用代理IP前需要注意的事项。 免费代理IP的…

如何使用第三方API采集电商数据呢?

电商商家最常唠叨的就是店铺运营难做。每日多平台店铺数据统计汇总繁琐耗时,人工效率偏低,且工作内容有限。 特别是眼下“618,双十一,双十二,年底大促”将至,如何提高运营的效率和质量、保证产品及服务的良…

2.4学习总结

2.4 1.不相交的线 2.最⼤⼦序和 3.判断⼦序列 4.不同的子序列 5.编辑距离 6.零的数列 Zero Sum 7.迷宫与陷阱 https://leetcode.cn/problems/uncrossed-lines/description/ 还是找最长公共子序列的问题 class Solution { public:int maxUncrossedLines(vector<int>&am…

算法学习——华为机考题库9(HJ56 - HJ63)

算法学习——华为机考题库9&#xff08;HJ56 - HJ63&#xff09; HJ56 完全数计算 描述 完全数&#xff08;Perfect number&#xff09;&#xff0c;又称完美数或完备数&#xff0c;是一些特殊的自然数。 它所有的真因子&#xff08;即除了自身以外的约数&#xff09;的和&…

C# CAD界面-自定义工具栏(二)

运行环境 vs2022 c# cad2016 调试成功 一、引用 acdbmgd.dllacmgd.dllaccoremgd.dllAutodesk.AutoCAD.Interop.Common.dllAutodesk.AutoCAD.Interop.dll using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.T…

题目 1163: 排队买票

题目描述: 有M个小孩到公园玩&#xff0c;门票是1元。其中N个小孩带的钱为1元&#xff0c;K个小孩带的钱为2元。售票员没有零钱&#xff0c;问这些小孩共有多少种排队方法&#xff0c;使得售票员总能找得开零钱。注意&#xff1a;两个拿一元零钱的小孩&#xff0c;他们的位置互…

【pwn】pwnable_start --只有read和write函数的getshell

首先查一下程序的保护情况 保护全关&#xff01;&#xff01;&#xff01; 然后看ida逻辑 ida的结果很简洁&#xff0c;只有一段汇编代码&#xff0c;我们再来看看nc情况 现在我们来分析一下汇编代码 mov ecx, esp ; addr .text:08048089 B2 14 …

Fink CDC数据同步(六)数据入湖Hudi

数据入湖Hudi Apache Hudi(简称&#xff1a;Hudi)使得您能在hadoop兼容的存储之上存储大量数据&#xff0c;同时它还提供两种原语&#xff0c;使得除了经典的批处理之外&#xff0c;还可以在数据湖上进行流处理。这两种原语分别是&#xff1a; Update/Delete记录&#xff1a;H…

LLaVA:GPT-4V(ision) 的新开源替代品

LLaVA&#xff1a;GPT-4V(ision) 的新开源替代品。 LLaVA &#xff08;https://llava-vl.github.io/&#xff0c;是 Large Language 和Visual A ssistant的缩写&#xff09;。它是一种很有前景的开源生成式 AI 模型&#xff0c;它复制了 OpenAI GPT-4 在与图像对话方面的一些功…

arping交叉编译

arping命令依赖libpcap和libnet&#xff0c;需要先交叉编译这两个库。 1.交叉编译libpcap 下载libpcap源文件&#xff0c;从github上克隆: git clone https://github.com/the-tcpdump-group/libpcap.git source交叉编译环境 # environment-setup是本机的交叉编译环境, 里面…

系统架构评估

系统架构评估: 系统架构评估是对系统设计的整体结构、组件之间的交互方式及其满足功能需求、性能需求、可扩展性、安全性、可靠性、可维护性、成本效益等多方面目标的能力进行深入审查和分析的过程。其主要目的在于确保系统的架构设计能够有效地支撑业务发展&#xff0c;并在未…

MongoDB 聚合:$listSessions

列出存储在config数据库system.sessions集合中的所有会话。MongoDB部署的所有成员都能看到这些会话。 当用户在mongod或mongos实例上创建会话时&#xff0c;会话最初存储在实例的内存中&#xff0c;也就是实例的本地记录。实例会定期将本地缓存的会话同步到config数据库中的sy…