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

359 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 药师角色权限配置
## 概述
为药师角色(角色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)赋予了以下权限:
- ✅ 订单管理全部权限(查看、编辑、关联支付单)
- ✅ 消费者处方审核权限(通过、驳回)
- ✅ 支付单审核权限(通过、驳回)
- ❌ 处方库管理权限(不需要)
- ❌ 财务字段查看权限(不需要)
药师现在可以完整地参与处方审核和订单管理流程。