Files
zyt/PAYMENT_AUDIT_PERMISSION_FIX.md
T
2026-04-10 14:43:58 +08:00

2.4 KiB

支付单审核权限修复

问题描述

接口 /adminapi/tcm.prescriptionOrder/auditPayment 返回错误:

{"code":0,"show":1,"msg":"无支付单审核权限","data":[]}

药师角色(角色ID=6)无法审核支付单。

问题原因

配置文件 server/config/project.php 中的 prescription_order_payment_audit_roles 已经包含角色 6,但由于 ThinkPHP 的配置缓存机制,旧的配置仍在使用。

解决方案

清除 ThinkPHP 缓存,使新配置生效:

cd server
php think clear

权限配置确认

文件:server/config/project.php

// 业务订单「关联支付单」审核:以下角色 ID + root 可操作(可与财务角色一致)
'prescription_order_payment_audit_roles' => [0, 3, 6],
  • 角色 0:超级管理员
  • 角色 3:管理员
  • 角色 6:药师

权限检查逻辑

文件:server/app/adminapi/logic/tcm/PrescriptionOrderLogic.php

public static function canAuditPaymentSlipOrder(array $adminInfo): bool
{
    if (!empty($adminInfo['root']) && (int) $adminInfo['root'] === 1) {
        return true;
    }
    $allow = Config::get('project.prescription_order_payment_audit_roles', [0, 3]);

    return self::roleIntersect($adminInfo, is_array($allow) ? $allow : []);
}

该方法从配置文件读取允许的角色列表,并检查当前用户的角色是否在列表中。

测试验证

  1. 清除缓存后,药师角色(角色ID=6)应该能够:

    • 调用 /adminapi/tcm.prescriptionOrder/auditPayment 接口
    • 审核通过或驳回支付单
  2. 验证步骤:

    • 使用药师账号登录
    • 打开业务订单详情
    • 点击"支付单审核"按钮
    • 确认可以正常审核

相关配置总结

药师角色(角色ID=6)的完整权限配置:

'order_edit_all_roles' => [0, 3, 6],                    // 订单管理全部权限
'prescription_library_manage_all_roles' => [0, 3],      // 处方库管理全部权限
'prescription_audit_roles' => [0, 3, 6],                // 消费者处方审核权限
'prescription_order_finance_roles' => [0, 3],           // 财务字段查看权限
'prescription_order_payment_audit_roles' => [0, 3, 6],  // 支付单审核权限

注意事项

  1. 每次修改 server/config/project.php 后,都需要清除缓存
  2. 生产环境部署时,确保运行 php think clear 命令
  3. 如果问题仍然存在,检查用户的角色ID是否正确分配