This commit is contained in:
Your Name
2026-03-11 14:33:49 +08:00
parent 38ad60f4bb
commit 08dd9cd307
57 changed files with 9547 additions and 379 deletions
+191
View File
@@ -0,0 +1,191 @@
# 订单系统 - 权限控制实现
## 功能说明
订单列表现已实现权限控制:
-**主管**: 可以查看所有订单
-**普通员工**: 只能查看自己创建的订单
---
## 实现原理
### 权限检查方法
`OrderLists` 中添加了 `filterByPermission()` 方法,支持超管、主管和普通员工三个权限级别:
```php
/**
* @notes 权限过滤 - 普通员工只能看自己创建的订单
* @param array $where
* @return void
*/
private function filterByPermission(array &$where): void
{
// 检查是否是超管(root字段为1)
if (!empty($this->adminInfo['root']) && $this->adminInfo['root'] == 1) {
// 超管不过滤,可以看所有订单
return;
}
// 主管角色ID列表(可根据实际调整)
$supervisorRoles = [0, 3];
// 检查当前用户是否是主管
$roleIds = AdminRole::where('admin_id', $this->adminId)->column('role_id');
// 如果不是主管,只能看自己创建的订单
$isSupervisor = count(array_intersect($roleIds, $supervisorRoles)) > 0;
if (!$isSupervisor) {
$where[] = ['creator_id', '=', $this->adminId];
}
}
```
### 调用位置
`lists()``count()` 方法中都调用了权限检查:
```php
public function lists(): array
{
$where = $this->searchWhere;
// 权限控制:普通员工只能看自己创建的订单
$this->filterByPermission($where);
// ... 其他查询逻辑
}
public function count(): int
{
$where = $this->searchWhere;
// 权限控制:普通员工只能看自己创建的订单
$this->filterByPermission($where);
// ... 其他查询逻辑
}
```
---
## 角色配置
### 超管
- **标识**: root 字段 = 1
- **权限**: 查看所有订单(不过滤)
### 主管角色(支持多个)
- **角色ID**: 0, 3(可根据实际调整)
- **权限**: 查看所有订单
### 普通员工角色
- **角色ID**: 其他(如 2, 4 等)
- **权限**: 只能查看自己创建的订单
---
## 权限检查流程
1. **检查是否是超管** → 如果是,不过滤,返回所有订单
2. **检查是否是主管** → 如果是,不过滤,返回所有订单
3. **普通员工** → 过滤,只返回自己创建的订单
---
## 自定义配置
### 修改主管角色ID
如果你的系统中主管角色ID不同,需要修改 `filterByPermission()` 方法中的 `$supervisorRoles` 数组:
```php
// 修改这一行
$supervisorRoles = [0, 3]; // 主管角色ID列表
// 改为你的实际角色ID,例如:
$supervisorRoles = [2, 5]; // 你的主管角色ID列表
```
支持任意数量的主管角色,只需添加到数组中即可。
### 超管字段
超管通过 `adminInfo['root']` 字段判断,值为 1 表示超管。这个字段来自 Admin 模型的 root 属性。
---
## 数据库关系
### 角色关联表 (zyt_admin_role)
```
admin_id: 管理员ID
role_id: 角色ID
```
### 订单表 (la_order)
```
creator_id: 创建人ID(管理员ID
```
---
## 工作流程
### 普通员工查看订单列表
1. 发送请求获取订单列表
2. 系统检查当前用户角色
3. 如果不是主管,添加过滤条件 `creator_id = 当前用户ID`
4. 返回该员工创建的订单
### 主管查看订单列表
1. 发送请求获取订单列表
2. 系统检查当前用户角色
3. 如果是主管,不添加过滤条件
4. 返回所有订单
---
## 测试步骤
### 测试普通员工权限
1. 以普通员工账号登录
2. 访问订单列表
3. 验证只显示该员工创建的订单
### 测试主管权限
1. 以主管账号登录
2. 访问订单列表
3. 验证显示所有订单
---
## 相关文件
- `server/app/adminapi/lists/order/OrderLists.php` - 订单列表(权限控制实现)
- `server/app/common/model/auth/AdminRole.php` - 管理员角色关联模型
- `server/app/common/model/Order.php` - 订单模型
---
## 注意事项
1. **角色ID配置**: 确保主管角色ID与系统实际配置一致
2. **权限验证**: 权限检查在列表查询时进行,不影响其他操作
3. **性能考虑**: 权限检查使用简单的 WHERE 条件,性能影响最小
4. **安全性**: 权限检查在后端进行,前端无法绕过
---
## 版本信息
- **实现版本**: 1.3.0
- **实现日期**: 2026-03-10
- **功能类型**: 权限控制
- **状态**: ✅ 完成
---
**实现完成**