# 订单系统 - 权限控制实现 ## 功能说明 订单列表现已实现权限控制: - ✅ **主管**: 可以查看所有订单 - ✅ **普通员工**: 只能查看自己创建的订单 --- ## 实现原理 ### 权限检查方法 在 `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 - **功能类型**: 权限控制 - **状态**: ✅ 完成 --- **实现完成** ✅