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

8.0 KiB
Raw Blame History

药师角色权限配置

概述

为药师角色(角色ID = 6)配置完整的权限,使其能够:

  • 审核处方
  • 审核支付单
  • 管理订单
  • 关联支付单

配置文件

文件: server/config/project.php

完整配置

return [
    // 订单管理全部权限角色
    '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. 订单管理权限 (order_edit_all_roles)

配置: [0, 3, 6]

权限内容:

  • 查看所有订单(不限制创建人)
  • 编辑所有订单
  • 关联所有支付单(不限制创建人)

适用场景:

  • 编辑业务订单
  • 关联支付单到业务订单
  • 查看订单列表

角色:

  • 0: 超级管理员
  • 3: 管理员
  • 6: 药师

2. 处方库管理权限 (prescription_library_manage_all_roles)

配置: [0, 3]

权限内容:

  • 查看所有处方库模板
  • 编辑所有处方库模板
  • 删除所有处方库模板

适用场景:

  • 管理处方库
  • 查看处方模板

角色:

  • 0: 超级管理员
  • 3: 管理员

说明: 药师不需要此权限,因为处方库主要由医生和管理员管理

3. 消费者处方审核权限 (prescription_audit_roles)

配置: [0, 3, 6]

权限内容:

  • 审核待审核的处方
  • 通过或驳回处方
  • 驳回时会同时作废处方

适用场景:

  • 消费者处方列表中的"审核"按钮
  • 处方审核流程

角色:

  • 0: 超级管理员
  • 3: 管理员
  • 6: 药师

4. 财务字段查看权限 (prescription_order_finance_roles)

配置: [0, 3]

权限内容:

  • 查看业务订单的 internal_cost(内部成本)字段
  • 查看其他财务相关字段

适用场景:

  • 业务订单详情
  • 业务订单列表

角色:

  • 0: 超级管理员
  • 3: 管理员

说明: 药师不需要此权限,财务数据仅管理员可见

5. 支付单审核权限 (prescription_order_payment_audit_roles)

配置: [0, 3, 6]

权限内容:

  • 审核业务订单的关联支付单
  • 通过或驳回支付单审核

适用场景:

  • 业务订单详情中的"支付审核"按钮
  • 支付单审核流程

角色:

  • 0: 超级管理员
  • 3: 管理员
  • 6: 药师

角色权限矩阵

权限 超级管理员(0) 医生(1) 医助(2) 管理员(3) 药师(6)
订单管理全部权限
处方库管理全部权限
消费者处方审核
财务字段查看
支付单审核

修改记录

修改1: 订单管理权限

文件: server/app/adminapi/logic/order/OrderLogic.php

问题: 硬编码了管理员角色 [0, 3],没有读取配置

修改前:

public static function isOrderListSupervisor(int $adminId, array $adminInfo): bool
{
    if (!empty($adminInfo['root']) && (int) $adminInfo['root'] === 1) {
        return true;
    }
    $supervisorRoles = [0, 3];  // 硬编码
    $myRoles = array_map('intval', $adminInfo['role_id'] ?? []);

    return count(array_intersect($myRoles, $supervisorRoles)) > 0;
}

修改后:

public static function isOrderListSupervisor(int $adminId, array $adminInfo): bool
{
    if (!empty($adminInfo['root']) && (int) $adminInfo['root'] === 1) {
        return true;
    }
    $supervisorRoles = config('project.order_edit_all_roles', [0, 3]);  // 从配置读取
    $myRoles = array_map('intval', $adminInfo['role_id'] ?? []);

    return count(array_intersect($myRoles, $supervisorRoles)) > 0;
}

修改2: 支付单审核权限

文件: server/config/project.php

修改前:

'prescription_order_payment_audit_roles' => [0, 3],

修改后:

'prescription_order_payment_audit_roles' => [0, 3, 6],

使用场景

场景1: 药师审核处方

流程:

  1. 医生创建处方(待审核状态)
  2. 药师登录系统
  3. 进入消费者处方列表
  4. 点击"审核"按钮
  5. 选择"通过"或"驳回"
  6. 填写审核意见
  7. 提交审核

权限检查:

  • prescription_audit_roles 包含角色 6
  • 药师可以审核处方

场景2: 药师审核支付单

流程:

  1. 管理员创建业务订单并关联支付单
  2. 药师登录系统
  3. 进入业务订单详情
  4. 点击"支付审核"按钮
  5. 选择"通过"或"驳回"
  6. 填写审核意见
  7. 提交审核

权限检查:

  • prescription_order_payment_audit_roles 包含角色 6
  • 药师可以审核支付单

场景3: 药师关联支付单

流程:

  1. 药师创建业务订单
  2. 选择支付单(其他人创建的)
  3. 点击保存

权限检查:

  • order_edit_all_roles 包含角色 6
  • 药师可以关联所有支付单

场景4: 药师编辑订单

流程:

  1. 药师查看业务订单列表
  2. 点击"编辑"按钮(其他人创建的订单)
  3. 修改订单信息
  4. 点击保存

权限检查:

  • order_edit_all_roles 包含角色 6
  • 药师可以编辑所有订单

测试建议

测试用例 1: 药师审核处方

前提条件:

  • 用户角色为药师(角色6
  • 存在待审核的处方

测试步骤:

  1. 登录药师账号
  2. 进入消费者处方列表
  3. 找到待审核的处方
  4. 点击"审核"按钮
  5. 选择"通过"
  6. 点击确定

预期结果:

  • 审核成功
  • 处方状态变为"已通过"

测试用例 2: 药师审核支付单

前提条件:

  • 用户角色为药师(角色6
  • 存在待审核的业务订单

测试步骤:

  1. 登录药师账号
  2. 进入业务订单列表
  3. 点击"查看"按钮
  4. 点击"支付审核"按钮
  5. 选择"通过"
  6. 点击确定

预期结果:

  • 审核成功
  • 支付单审核状态变为"已通过"

测试用例 3: 药师关联支付单

前提条件:

  • 用户角色为药师(角色6
  • 存在其他人创建的支付单

测试步骤:

  1. 登录药师账号
  2. 创建业务订单
  3. 选择其他人创建的支付单
  4. 点击保存

预期结果:

  • 保存成功
  • 支付单成功关联到业务订单

测试用例 4: 药师编辑订单

前提条件:

  • 用户角色为药师(角色6
  • 存在其他人创建的业务订单

测试步骤:

  1. 登录药师账号
  2. 进入业务订单列表
  3. 点击"编辑"按钮(其他人创建的订单)
  4. 修改订单信息
  5. 点击保存

预期结果:

  • 保存成功
  • 订单信息更新

错误排查

错误1: "无权限关联所选支付单"

原因: order_edit_all_roles 配置中没有包含角色 6

解决方案:

'order_edit_all_roles' => [0, 3, 6],  // 添加角色 6

错误2: "无支付单审核权限"

原因: prescription_order_payment_audit_roles 配置中没有包含角色 6

解决方案:

'prescription_order_payment_audit_roles' => [0, 3, 6],  // 添加角色 6

错误3: "无处方审核权限"

原因: prescription_audit_roles 配置中没有包含角色 6

解决方案:

'prescription_audit_roles' => [0, 3, 6],  // 添加角色 6

相关文档

  • ORDER_SUPERVISOR_ROLE_CONFIG_FIX.md - 订单管理员角色配置修复文档
  • server/config/project.php - 项目配置文件

总结

通过配置文件,为药师角色(角色6)赋予了以下权限:

  • 订单管理全部权限(查看、编辑、关联支付单)
  • 消费者处方审核权限(通过、驳回)
  • 支付单审核权限(通过、驳回)
  • 处方库管理权限(不需要)
  • 财务字段查看权限(不需要)

药师现在可以完整地参与处方审核和订单管理流程。