通过子资源的Symfony投票器没有被调用。

问题描述 投票:0回答:1

下面是背景。

我使用Symfony 3.4和api-platform。

我有两个类。

  • 供应商
  • 产品介绍

我想列出所有供应商的产品。

在供应商实体中,我已经在常规CRUD方法上实现了访问控制,该方法在投票人中工作正常。

我也有一个通过子资源的路由,但不能正常工作。

 * collectionOperations={
 *          "get"={
 *              "access_control"="is_granted('LIST', object)",
 *              "normalization_context"={"groups"={"supplier.liste"}},
 *          },
 *     },
 *     itemOperations={
 *          "get"={
 *              "method"="GET",
 *              "access_control"="is_granted('VIEW', object)",
 *          },
 *     },
 *     subresourceOperations={
 *          "supplier_product_get"={
 *              "path"="/supplier/{id}/products",
 *              "method"= "GET",
 *              "access_control"="is_granted('LIST', object)",
 *          },
 * }

问题是,子资源的访问控制不工作。在那里,它应该去检查投票者对这个资源的权限,但并没有检查投票者,当我需要他返回一个403时,却返回一个HTTP响应代码200。

我检查了文档,他们使用安全而不是access_control这样的。

 * subresourceOperations={
 *          "supplier_product_get"={
 *              "path"="/supplier/{id}/products",
 *              "method"= "GET",
 *              "security"="is_granted('LIST', object)",
 *          },
 * }

而且它也不工作。

有谁知道为什么没有调用投票器的线索或提示吗?

symfony api-platform.com subresource-integrity symfony2-voter
1个回答
0
投票

只有一个小建议。我认为操作 命名为 "api_questions_answer_get_subresource",在你的例子中是 "api_products_supplier_get_subresource"(用 "binconsole debug:router "检查名称)。请看 https:/api-platform.comdocscores分资源#分资源。 "注意,操作名称,这里的api_questions_answer_get_subresource,是重要的关键字。它会被自动设置为$resources_$subresource(s)_get_subresource。要想找到正确的操作名称,可以使用binconsole debug:router。" 另外,似乎你可以在is_granted中使用'object'参数,它包含了子资源的集合(在我的例子中,ApiPlatform/Core/Bridge/Doctrine/Orm/Paginator)。所以,如果你打算对你的子资源的类,或者对象本身进行授予,我想你会需要一些额外的工作(只要考虑是否真的需要)。

© www.soinside.com 2019 - 2024. All rights reserved.