如何使用ThinkPHP6实现用户角色权限管理
随着业务的不断发展,很多中小型公司都拥有了自己的用户维护系统,用户权限管理是其中重要的一环。为了保护系统中的敏感信息、保障业务的正常运行,我们需要使用角色权限管理机制,保证不同角色的用户只能访问指定的资源和数据。
本文将以ThinkPHP6框架为例,介绍如何使用其提供的权限控制中间件和扩展扩展包实现用户角色权限管理。
- 创建角色表和权限表
首先我们需要定义两个数据库表,一个是角色表,用来存储系统角色信息;另一个是权限表,用来存储系统权限信息。
CREATE TABLE role
(
id
int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
name
varchar(20) NOT NULL COMMENT '角色名称',
description
varchar(50) NOT NULL COMMENT '角色描述',
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
CREATE TABLE permission
(
id
int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
name
varchar(20) NOT NULL COMMENT '权限名称',
description
varchar(50) NOT NULL COMMENT '权限描述',
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';
我们可以使用ThinkPHP提供的数据库迁移工具来创建表:php think migrate:run。
- 创建角色和权限模型
接下来,我们需要创建角色和权限的模型。在app/model目录下创建Role.php和Permission.php文件,代码如下:
namespace appmodel;
use thinkModel;
class Role extends Model
{
protected $table = 'role';
}
namespace appmodel;
use thinkModel;
class Permission extends Model
{
protected $table = 'permission';
}
- 创建角色和权限关联表
由于一个用户可能拥有多个角色,一个角色也可能对应多个权限,所以我们需要创建一个角色和权限的关联表。在数据库中创建一个role_permission表。
CREATE TABLE role_permission
(
id
int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
role_id
int(11) NOT NULL COMMENT '角色ID',
permission_id
int(11) NOT NULL COMMENT '权限ID',
PRIMARY KEY (id
),
KEY role_id
(role_id
),
KEY permission_id
(permission_id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色-权限关联表';
在模型中定义角色和权限的多对多关系:
namespace appmodel;
use thinkModel;
class Role extends Model
{
protected $table = 'role'; public function permissions() { return $this->belongsToMany( Permission::class, 'role_permission', 'role_id', 'permission_id' ); }
}
namespace appmodel;
use thinkModel;
class Permission extends Model
{
protected $table = 'permission'; public function roles() { return $this->belongsToMany( Role::class, 'role_permission', 'permission_id', 'role_id' ); }
}
- 定义中间件
在ThinkPHP6中,中间件是处理请求的强大工具,我们可以通过中间件来实现权限控制。创建一个CheckAuth中间件,用于判断用户是否有权限进行当前的操作。在appmiddleware目录下创建CheckAuth.php文件,代码如下:
namespace appmiddleware;
use thinkacadeDb;
use thinkacadeSession;
use thinkacadeConfig;
class CheckAuth
{
public function handle($request, Closure $next) { if (Session::has('user')) { $roles = Db::table('user') ->alias('u') ->leftJoin('role_user ru', 'u.id = ru.user_id') ->leftJoin('role r', 'ru.role_id = r.id') ->where('u.id', '=', Session::get('user')->id) ->field('r.id') ->select(); $permissions = Config::get('permissions'); foreach ($roles as $role) { $rolePermissions = Db::table('role_permission') ->where('role_id', '=', $role->id) ->field('permission_id') ->select(); foreach ($rolePermissions as $rolePermission) { if (in_array($rolePermission->permission_id, $permissions)) { return $next($request); } } } } abort(403, '没有权限'); }
}
该中间件会先查询当前用户所拥有的所有角色,在遍历角色时,查询每个角色所拥有的权限,如果有符合当前请求的权限,就允许继续执行,否则返回403错误。
- 创建权限配置文件
为了方便管理系统的权限,我们可以使用ThinkPHP提供的Config功能,将所有的权限写入配置文件中。在config目录下创建一个permissions.php文件,代码如下:
return [
1 => 'user.create', 2 => 'user.read', 3 => 'user.update', 4 => 'user.delete',
];
我们可以通过key/value的形式来记录系统所有的权限,key为一个整数,value为一个字符串,表示权限的名称。
- 应用中间件
最后,我们需要实际应用上述的中间件。打开config目录下的middleware.php文件,添加CheckAuth中间件。
return [
// ... 'check_auth' => appmiddlewareCheckAuth::class,
];
中间件的应用顺序是按照数组的键名从前到后依次执行的,我们可以通过数组下标来调整中间件的执行顺序。
在需要进行权限控制的控制器或方法上,可以使用middleware方法来绑定CheckAuth中间件。
namespace appcontroller;
use thinkacadeView;
class UserController
{
public function create() { $this->middleware('check_auth'); // ... }
}
至此,我们已经完成了使用ThinkPHP6实现用户角色权限管理的所有步骤,您可以根据实际业务需求来扩展和完善上述示例代码。
以上是如何使用ThinkPHP6实现用户角色权限管理的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

运行 ThinkPHP 项目需要:安装 Composer;使用 Composer 创建项目;进入项目目录,执行 php bin/console serve;访问 http://localhost:8000 查看欢迎页面。

ThinkPHP 拥有多个版本,针对不同 PHP 版本而设计。主要版本包括 3.2、5.0、5.1 和 6.0,而次要版本用于修复 bug 和提供新功能。当前最新稳定版本为 ThinkPHP 6.0.16。在选择版本时,需考虑 PHP 版本、功能需求和社区支持。建议使用最新稳定版本以获得最佳性能和支持。

如何使用Layui框架开发一个支持多用户登录的权限管理系统引言:在现代的互联网时代,越来越多的应用程序需要支持多用户登录,以实现个性化的功能和权限管理。为了保护系统的安全性和数据的私密性,开发者需要使用一定的手段来实现多用户登录和权限管理的功能。本文将介绍如何使用Layui框架来开发一个支持多用户登录的权限管理系统,并给出具体的代码示例。准备工作在开始开发之

ThinkPHP Framework 的本地运行步骤:下载并解压 ThinkPHP Framework 到本地目录。创建虚拟主机(可选),指向 ThinkPHP 根目录。配置数据库连接参数。启动 Web 服务器。初始化 ThinkPHP 应用程序。访问 ThinkPHP 应用程序 URL 运行。

如何在Laravel中实现权限管理系统引言:随着Web应用的不断发展,权限管理系统成为了许多应用的基础功能之一。Laravel作为一种流行的PHP框架,提供了丰富的工具和功能来实现权限管理系统。本文将介绍如何在Laravel中实现一个简单而强大的权限管理系统,并提供具体的代码示例。一、权限管理系统的设计思路在设计权限管理系统时,需要考虑以下几个关键点:角色和

《开发建议:如何利用ThinkPHP框架实现异步任务》随着互联网技术的迅猛发展,Web应用程序对于处理大量并发请求和复杂业务逻辑的需求也越来越高。为了提高系统的性能和用户体验,开发人员常常会考虑利用异步任务来执行一些耗时操作,比如发送邮件、处理文件上传、生成报表等。在PHP领域,ThinkPHP框架作为一款流行的开发框架,提供了一些便捷的方式来实现异步任务。

Laravel 和 ThinkPHP 框架的性能比较:ThinkPHP 性能通常优于 Laravel,专注于优化和缓存。Laravel 性能良好,但对于复杂应用程序,ThinkPHP 可能更适合。

临时文件夹无写入权限不能安装这个问题让很多的用户都十分的头疼,其实操作不是很麻烦需要进入你的高级菜单进行更改就好,来看看怎么解决无写入权限问题吧。临时文件夹无写入权限不能安装:1、首先右击桌面的此电脑,然后点击“属性”。2、然后点击下面的“高级系统设置”。3、随后点击窗口下面的“环境变量”。4、之后你就可以去打开环境变量窗口了,点击tmp文件选择“编辑”。5、然后在打开的窗口点击“浏览文件”。6、设置新的变量文件夹,然后点击确定。7、最后等到成功即可。
