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文件,代码如下:,<?php
namespace appmodel;,use thinkModel;,class Role extends Model
{,登录后复制,},<?php
namespace appmodel;,use thinkModel;,class Permission extends Model
{,登录后复制,},由于一个用户可能拥有多个角色,一个角色也可能对应多个权限,所以我们需要创建一个角色和权限的关联表。在数据库中创建一个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=’角色-权限关联表’;,在模型中定义角色和权限的多对多关系:,<?php
namespace appmodel;,use thinkModel;,class Role extends Model
{,登录后复制,},<?php
namespace appmodel;,use thinkModel;,class Permission extends Model
{,登录后复制,},在ThinkPHP6中,中间件是处理请求的强大工具,我们可以通过中间件来实现权限控制。创建一个CheckAuth中间件,用于判断用户是否有权限进行当前的操作。在appmiddleware目录下创建CheckAuth.php文件,代码如下:,<?php
namespace appmiddleware;,use thinkacadeDb;
use thinkacadeSession;
use thinkacadeConfig;,class CheckAuth
{,登录后复制,},该中间件会先查询当前用户所拥有的所有角色,在遍历角色时,查询每个角色所拥有的权限,如果有符合当前请求的权限,就允许继续执行,否则返回403错误。,为了方便管理系统的权限,我们可以使用ThinkPHP提供的Config功能,将所有的权限写入配置文件中。在config目录下创建一个permissions.php文件,代码如下:,<?php
return [,登录后复制,];,我们可以通过key/value的形式来记录系统所有的权限,key为一个整数,value为一个字符串,表示权限的名称。,最后,我们需要实际应用上述的中间件。打开config目录下的middleware.php文件,添加CheckAuth中间件。,<?php
return [,登录后复制,];,中间件的应用顺序是按照数组的键名从前到后依次执行的,我们可以通过数组下标来调整中间件的执行顺序。,在需要进行权限控制的控制器或方法上,可以使用middleware方法来绑定CheckAuth中间件。,<?php
namespace appcontroller;,use thinkacadeView;,class UserController
{,登录后复制,},至此,我们已经完成了使用ThinkPHP6实现用户角色权限管理的所有步骤,您可以根据实际业务需求来扩展和完善上述示例代码。,以上就是如何使用ThinkPHP6实现用户角色权限管理的详细内容,更多请关注www.xfxf.net其它相关文章!