This commit is contained in:
Your Name
2026-04-10 14:43:58 +08:00
parent fdf714f833
commit 4909ec6daa
38 changed files with 6549 additions and 735 deletions
+358
View File
@@ -0,0 +1,358 @@
# 药师角色权限配置
## 概述
为药师角色(角色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)赋予了以下权限:
- ✅ 订单管理全部权限(查看、编辑、关联支付单)
- ✅ 消费者处方审核权限(通过、驳回)
- ✅ 支付单审核权限(通过、驳回)
- ❌ 处方库管理权限(不需要)
- ❌ 财务字段查看权限(不需要)
药师现在可以完整地参与处方审核和订单管理流程。