PrestaShop 8.1.1:限制销售代表仅查看自身创建的订单
PrestaShop 8.1.1 实现销售代表仅查看自身创建订单的方案
针对你提到的权限组ID为5的「销售代表」角色,以下是无需修改核心文件、基于自定义模块的实现方案,适配PrestaShop 8的Symfony架构:
核心思路
利用PrestaShop的事件钩子机制,在订单列表查询和订单详情加载时添加权限过滤:
- 订单列表页:通过钩子修改查询构建器,仅返回当前员工创建的订单
- 订单详情/编辑页:验证当前订单的创建者是否为登录员工,否则拦截访问
步骤1:创建自定义模块
新建模块(示例名称:RestrictSalesRepOrders),模块结构如下:
modules/ └── restrictsalesreporders/ └── restrictsalesreporders.php
模块核心代码
<?php if (!defined('_PS_VERSION_')) { exit; } class RestrictSalesRepOrders extends Module { public function __construct() { $this->name = 'restrictsalesreporders'; $this->tab = 'administration'; $this->version = '1.0.0'; $this->author = 'Your Name'; $this->need_instance = 0; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Restrict Sales Rep to Own Orders'); $this->description = $this->l('Limits sales representatives (group ID 5) to only view/edit orders they created.'); $this->ps_versions_compliancy = [ 'min' => '8.0', 'max' => _PS_VERSION_ ]; } public function install() { return parent::install() && $this->registerHook('actionListQueryBuilderModifier') && $this->registerHook('actionGetOrder'); } // 过滤订单列表查询 public function hookActionListQueryBuilderModifier($params) { // 仅处理订单列表的查询 if ($params['className'] !== 'Order') { return; } $employee = Context::getContext()->employee; if (!$employee) return; // 检查当前员工是否属于销售代表组(ID=5) $isSalesRep = false; foreach ($employee->getGroups() as $group) { if ($group['id_group'] == 5) { $isSalesRep = true; break; } } if (!$isSalesRep) return; // 修改查询,仅保留当前员工创建的订单 $qb = $params['query_builder']; $qb->andWhere('o.id_employee = :employee_id') ->setParameter('employee_id', $employee->id); } // 拦截非自身创建的订单访问 public function hookActionGetOrder($params) { $employee = Context::getContext()->employee; if (!$employee) return; // 检查当前员工是否属于销售代表组(ID=5) $isSalesRep = false; foreach ($employee->getGroups() as $group) { if ($group['id_group'] == 5) { $isSalesRep = true; break; } } if (!$isSalesRep) return; $order = $params['order']; // 若订单创建者不是当前员工,跳转到无权限页面 if ($order->id_employee != $employee->id) { Tools::redirectAdmin(Context::getContext()->link->getAdminLink('AdminForbidden')); } } }
步骤2:安装并测试模块
- 将模块文件夹上传到PrestaShop的
modules目录 - 后台登录,进入「模块管理器」搜索并安装该模块
- 使用销售代表账号登录后台:
- 订单列表仅显示该员工创建的订单
- 尝试访问其他员工创建的订单,会被跳转到无权限页面
关键说明
- 权限组ID验证:确保代码中
id_group == 5与你实际创建的销售代表组ID一致(可通过后台权限组编辑链接的id_group参数确认) - 兼容性:该方案基于PrestaShop官方钩子,不修改核心文件,支持8.x版本升级
- 扩展:若需要支持更多权限组,可将
id_group == 5改为数组判断(如in_array($group['id_group'], [5,6]))
内容的提问来源于stack exchange,提问作者niffe33123
相关产品推荐
相关产品推荐

