ThinkAdmin6部分

本文详细介绍了ThinkAdmin6的系统运行模式,包括开发模式和生产模式的特性和切换方法。接着阐述了系统权限管理,包括注解规则、权限管理、菜单管理和用户管理的实现细节。此外,还讨论了访问路由配置,分为全局路由和应用路由的配置方法。最后,讲解了系统异步任务的管理,包括守护进程、任务创建、进程管理等相关指令和功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一: 系统运行模式

ThinkAdmin 系统运行模式有两种,分别为 开发模式生产模式

需要在系统后台的 系统参数管理 切换模式,如果出现页面无法访问或报错,请删除 runtime 目录再尝试。

开发模式

在开发模式下,系统只会进行轻度缓存,大部分系统数据不会进行缓存,性能偏低。

开发人员或在功能调试时使用,系统异常时会显示详细的错误信息,同时还会记录操作日志及数据库 SQL 语句信息。

生产模式 

在生产模式下,系统会进行重度缓存,包括数据库字段缓存、模板编译缓存、系统参数配置等缓存,性能最优。

项目正式部署上线后使用,系统异常时统一显示 “页面错误!请稍后再试~”,只记录重要的异常日志信息,强烈推荐上线后使用此模式。

 

 

第二: 系统权限管理

ThinkAdmin V6 的权限管理基于标准 RBAC 简化而来,加入注解权限配置,可精确控制到按钮操作权限。

权限管理涉及 功能节点权限管理菜单管理用户管理,去除了繁杂的功能节点,使得权限管理起来更简单;

其中 功能节点 是由系统自动维护,根据控制器的代码注释实现刷新。如需要加入权限控制的访问方法,需要写上标准的块注释。

注解规则

注解规则案例如下,@auth 优先级高于 @login 配置,通常只需要配置 @auth 即可添加到后台权限配置。

/**
 * 操作方法的名称
 * @auth true  # 表示需要验证权限
 * @menu true  # 添加系统菜单节点
 * @login true # 强制登录才可访问
 */
public function index(){
   // @todo
}

 

注释中有效注释解析如下:

  • 其中@auth true表示访问需要配置授权才能访问
  • 其中@menu true在编辑菜单时自动提示节点可选项
  • 其中@login true强制需要登录才能访问该操作

 权限管理

创建好权限后,需要给权限配置勾选可以访问的功能节点。

如:权限 A 只能访问哪些节点,就需要勾选对应的功能节点。

在授权配置时,涉及到应用名称显示,可以在 config/app.php 配置 app_names 中文名称,名称在显示前会经过 lang() 语言转换处理。 如果不希望指定应用不希望授后台权限控制,可以配置 rbac_ignore 选项。

return [
    // ...
    // 其他参数未显示
    'app_names' => [
        'admin' => '系统管理',
        'wechat' => '微信管理',
        'plugin-account' => '账号管理'
    ],
    // 忽略 RBAC 权限检查,可以配置多个应用
    'rbac_ignore' => [ 'index', 'wap', 'api' ],
    // 配置 RBAC 登录地址,通常不需要配置
    'rbac_login' => ''
];

 权限配置截图

 

菜单管理 

菜单最多支持三级,上 1 级 + 左 2 级。

菜单创建与编辑的表单,要特别注意菜单对应的节点规范。

如:admin/menu/index,注意要掉前后的斜线,目前不支持外部链接权限管理。

如果在控制器方法的节点注释中含 menu true 则该节点会出现在自动提示列表中,可以直接从列表选取。

 菜单管理截图

用户管理 

在后台添加用户账号后,需要将上面配置好的权限分配给用户账号,该用户账号登录后就可以显示对应菜单及访问权限。

注意:默认账号 admin 为系统的超级用户,拥有系统所有节点权限,超级用户的账号可以在 config/app.php 进行修改

用户管理截图

 

 

 第三:访问路由配置

 

ThinkAdmin 是基于 ThinkPHP6 的多应用平台,对于路由与 ThinkPHP5 有很大区别。

这里路由分为全局路由和应用路由。

全局路由配置

全局路由可以监听根路径,如果 /my-test.html 等,全局路由需要在每个应用的 sys.php 或插件服务类进行动态注册。

如:admin/sys.php 

# 访问入口 index.php
# 访问地址 https://yourdomain.com/demo
# 路由配置 app/admin/sys.php 当然放其他应用目录也是一样的
app()->route->get('demo','myself/test'); //-> /myself/test

应用路由配置

路由需要按模块配置,每个模块独立管理。

如:admin/route/demo.php

# 访问入口 index.php
# 访问地址 https://yourdomain.com/admin/demo
# 路由配置 app/admin/route
app()->route->get('demo','test'); //-> /admin/test

# 访问入口 index.php
# 访问地址 https://yourdomain.com/admin/demo2
# 路由配置 app/admin/route
app()->route->any('demo2','user/index'); //-> /admin/user/index

做应用绑定,可以去除模块名称 如入口为admin.php,自动绑定应用为admin

# 访问入口 admin.php
# 访问地址 https://yourdomain.com/demo
# 路由配置 app/admin/route
app()->route->get('demo','test') -> /admin/test

由于多应用模式,默认绑定应用index

# 访问入口 index.php
# 访问地址 https://yourdomain.com/demo
# 路由配置 app/index/route
app()->route->get('demo','test'); //-> /index/demo

用 app()->route 只是一种调用方式,也可以用 return 返回数组。

第四:系统异步任务

系统异步任务是 ThinkAdmin 的一大特色,实现了 windows 及 linux 平台多进程并列执行任务,大大提升了任务处理能力。

监听进程 LISTEN 启动之后,理论上会每隔 0.5 秒扫描一次数据表,当扫描到有需要执行的任务时会创建独立 PHP-CLI 进程。

特别注意: 不能同时启动多个监听进程 LISTEN 以防止重复执行任务,建议使用 START 指令来启动监听 LISTEN 进程。

守护进程管理

创建定时任务去执行检测监听进程 LISTEN 的指令 START,当发现监听进程 LISTEN 未运行时会自动创建;

如果是 linux 服务器,建议指定用户运行,防止 cli 与 cgi | fpm 三种运行方式的缓存文件权限冲突,排错时需检查日志;

建议指定用户运行 sudo -u www php think xadmin:queue start,可以直接在系统后台的任务管理复制执行指令再配置到定时任务;

任务进程创建是通过 PHP 函数 exec 实现,所以函数 exec 不能被禁用,当执行异常时请根据错误提示对 PHP 运行环境进行调整;

进程管理相关指令

执行 php think xadmin:queue stop # 停止所有正在执行的异步任务进程

执行 php think xadmin:queue query # 查询当前所有正在执行的任务进程

执行 php think xadmin:queue start # 开启异步任务守护进程(后台进程)

执行 php think xadmin:queue listen # 启动异步任务监听进程(前台进程)

执行 php think xadmin:queue status # 查看当前守护进程的后台运行状态

创建异步任务

可以使用 sysqueue() 函数或在控制器中使用 $this->_queue() 创建任务队列。

// 直接使用函数创建任务,获取到任务编号
$code = sysqueue($title, $command, $later = 0, $data = [], $rscript = 1, $loops = 0);

// 在控制器中创建任务,获取到任务编号
$queue = $this->_queue($title, $command, $later = 0, $data = [], $rscript = 0, $loops = 0);
$code = $queue->code; 

// 如果要在任务中创建新任务,需要注意创建新的任务对象哦,不然会导致原任务异常
$queue = QueueService::instance([],true); // 创建新任务服务,不替换原任务对象
$queue->register();// 注册新任务内容

// 在任务中可以使用 $this->queue 获取当前任务的数据(在任务继承了 Queue 或 QueueService 的情况下))
$this->queue->code; // 获取当前任务编号
$this->queue->data; // 获取当前任务参数
$this->queue->record; // 获取当前任务记录

// 设置当前任务进度数据及成功状态或失败状态(在任务继承了 Queue 或 QueueService 的情况下)
$this->setQueueError(); // 设置失败的消息并结束执行
$this->setQueueSuccess(); // 设置成功的消息并结束执行
$this->setQueueProgress(); // 设置运行进度并继续执行

以上两种方式都可以指定 任务标题执行任务内容执行延时时间任务绑定数据允许重复创建是否循环执行 等。

有些任务,在待处理和处理中是不需要再创建重复任务的,$rscript 就需要设置为 0,这是根据标题来识别的,所以标题也可以适当加上个性名称。

自建的异步处理是多进程任务处理,其中 windows 是基于 wmic 指令创建后台进程实现的,而 linux 则是通过 & 符实现。

因为是异步并列执行,建议自行控制下任务数据,免得过多消耗系统资源而影响项目正常使用。

在部署时,通常我们只需要创建定时器去执行 php think xadmin:queue start 就可以守护异步任务监听进程。

目前 ThinkAmdin V6 自定义异步任务机制支持两种规则机制:

自定义单独的处理类,需要继承 think\admin\Queue 抽象类,实现 execute 方法,参数为任务绑定的参数 $data

自定义 ThinkPHP 指令,默认使用 Console::call() 去尝试执行传入的指令,指令可以继承 think\admin\Command

异步任务进度

ThinkAdmin 支持任务完成状态跟进。

后端创建任务之后可以获得任务编号,任务编号以字母 Q 开头

前端可以使用 $.loadQueue(CODE)展示任务完成进度及数据

后端任务可以使用 $this->setQueueProgress() 任务完成进度

后端任务可以使用 $this->setQueueError() 设置任务已经失败

后端任务可以使用 $this->setQueueSuccess() 设置任务已经完成

具体参数可以查看方法源代码,进度数值为百分比,如 50 表示完成了 50%

基于控制器实现,前端 data-queue=URL ,后端调用 $this->_queue() 方法创建任务

模板替换变量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值