4.3 KiB
4.3 KiB
订单系统 - 权限控制实现
功能说明
订单列表现已实现权限控制:
- ✅ 主管: 可以查看所有订单
- ✅ 普通员工: 只能查看自己创建的订单
实现原理
权限检查方法
在 OrderLists 中添加了 filterByPermission() 方法,支持超管、主管和普通员工三个权限级别:
/**
* @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() 方法中都调用了权限检查:
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 等)
- 权限: 只能查看自己创建的订单
权限检查流程
- 检查是否是超管 → 如果是,不过滤,返回所有订单
- 检查是否是主管 → 如果是,不过滤,返回所有订单
- 普通员工 → 过滤,只返回自己创建的订单
自定义配置
修改主管角色ID
如果你的系统中主管角色ID不同,需要修改 filterByPermission() 方法中的 $supervisorRoles 数组:
// 修改这一行
$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)
工作流程
普通员工查看订单列表
- 发送请求获取订单列表
- 系统检查当前用户角色
- 如果不是主管,添加过滤条件
creator_id = 当前用户ID - 返回该员工创建的订单
主管查看订单列表
- 发送请求获取订单列表
- 系统检查当前用户角色
- 如果是主管,不添加过滤条件
- 返回所有订单
测试步骤
测试普通员工权限
- 以普通员工账号登录
- 访问订单列表
- 验证只显示该员工创建的订单
测试主管权限
- 以主管账号登录
- 访问订单列表
- 验证显示所有订单
相关文件
server/app/adminapi/lists/order/OrderLists.php- 订单列表(权限控制实现)server/app/common/model/auth/AdminRole.php- 管理员角色关联模型server/app/common/model/Order.php- 订单模型
注意事项
- 角色ID配置: 确保主管角色ID与系统实际配置一致
- 权限验证: 权限检查在列表查询时进行,不影响其他操作
- 性能考虑: 权限检查使用简单的 WHERE 条件,性能影响最小
- 安全性: 权限检查在后端进行,前端无法绕过
版本信息
- 实现版本: 1.3.0
- 实现日期: 2026-03-10
- 功能类型: 权限控制
- 状态: ✅ 完成
实现完成 ✅