# 药师角色权限配置 ## 概述 为药师角色(角色ID = 6)配置完整的权限,使其能够: - 审核处方 - 审核支付单 - 管理订单 - 关联支付单 ## 配置文件 **文件**: `server/config/project.php` ### 完整配置 ```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]`,没有读取配置 **修改前**: ```php 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; } ``` **修改后**: ```php 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` **修改前**: ```php 'prescription_order_payment_audit_roles' => [0, 3], ``` **修改后**: ```php '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 **解决方案**: ```php 'order_edit_all_roles' => [0, 3, 6], // 添加角色 6 ``` ### 错误2: "无支付单审核权限" **原因**: `prescription_order_payment_audit_roles` 配置中没有包含角色 6 **解决方案**: ```php 'prescription_order_payment_audit_roles' => [0, 3, 6], // 添加角色 6 ``` ### 错误3: "无处方审核权限" **原因**: `prescription_audit_roles` 配置中没有包含角色 6 **解决方案**: ```php 'prescription_audit_roles' => [0, 3, 6], // 添加角色 6 ``` ## 相关文档 - `ORDER_SUPERVISOR_ROLE_CONFIG_FIX.md` - 订单管理员角色配置修复文档 - `server/config/project.php` - 项目配置文件 ## 总结 通过配置文件,为药师角色(角色6)赋予了以下权限: - ✅ 订单管理全部权限(查看、编辑、关联支付单) - ✅ 消费者处方审核权限(通过、驳回) - ✅ 支付单审核权限(通过、驳回) - ❌ 处方库管理权限(不需要) - ❌ 财务字段查看权限(不需要) 药师现在可以完整地参与处方审核和订单管理流程。