359 lines
8.0 KiB
Markdown
359 lines
8.0 KiB
Markdown
# 药师角色权限配置
|
||
|
||
## 概述
|
||
|
||
为药师角色(角色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)赋予了以下权限:
|
||
- ✅ 订单管理全部权限(查看、编辑、关联支付单)
|
||
- ✅ 消费者处方审核权限(通过、驳回)
|
||
- ✅ 支付单审核权限(通过、驳回)
|
||
- ❌ 处方库管理权限(不需要)
|
||
- ❌ 财务字段查看权限(不需要)
|
||
|
||
药师现在可以完整地参与处方审核和订单管理流程。
|