Shopware 6添加Search Criteria的includes仍遇权限缺失问题求助
解决Shopware Admin SDK加载product_manufacturer的权限缺失问题
你遇到的问题核心是应用未声明对product_manufacturer实体的访问权限——即使你限制了只加载id,Shopware也会先校验你是否有访问该实体的权限,字段级的includes限制是建立在实体权限之上的。以下是具体解决步骤:
1. 补充应用权限配置
打开示例应用根目录下的manifest.xml,找到<permissions>节点,添加product_manufacturer:read权限:
<permissions> <!-- 保留原有权限 --> <permission>product:read</permission> <permission>product:write</permission> <!-- 添加以下权限声明 --> <permission>product_manufacturer:read</permission> </permissions>
这个配置是告诉Shopware,你的应用需要读取product_manufacturer实体的权限,没有这个声明,即使只请求id也会被权限拦截。
2. 更新应用并确认权限
修改完manifest.xml后,需要重新同步应用配置到Shopware后台:
- 本地开发环境可执行命令:
./bin/console app:refresh - 在Shopware后台的「扩展 > 我的扩展」中,找到该示例应用,确认
product_manufacturer:read权限已被正确授予
3. 代码优化(可选)
你的Criteria写法本身没问题,但可以更简洁:
async loadManufacturer() { const manufacturerCriteria = new data.Classes.Criteria(); manufacturerCriteria.setLimit(1); // 仅加载必要的id字段 manufacturerCriteria.addIncludes({ 'product_manufacturer': ['id'] }); const manufacturers = await data.repository('product_manufacturer').search(manufacturerCriteria); this.manufacturer = manufacturers.first() || null; }
核心解决点还是权限配置,代码优化仅为简化逻辑。
为什么加了includes还是报错?
Shopware的权限校验优先级是:先校验实体级访问权限,再校验字段级权限。你没有声明product_manufacturer的读权限,请求根本到不了字段校验环节,直接就被权限拦截了。
内容的提问来源于stack exchange,提问作者lucamario
相关产品推荐
相关产品推荐

