【问题标题】:Symfony voter via subresource is not being called未调用通过子资源的 Symfony 选民
【发布时间】:2020-09-21 01:46:26
【问题描述】:

这里是上下文:

我使用带有 api-platform 的 Symfony 3.4。

我有两个班级:

  • 供应商
  • 产品

我要列出所有供应商的产品

在供应商实体中,我在常规 CRUD 方法上实现了 access_control,该方法适用于选民。

我也有一条通过子资源的路线无法正常工作:

 * 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】:

    只有一个提示。我认为操作必须命名为“api_questions_answer_get_subresource”,在您的情况下为“api_products_supplier_get_subresource”(使用“bin/console debug:router”检查名称)。
    https://api-platform.com/docs/core/subresources/#subresources
    "请注意,此处的操作名称 api_questions_answer_get_subresource 是重要的关键字。它会自动设置为 $resources_$subresource(s)_get_subresource。要找到正确的操作名称,您可以使用 bin/console debug:router。
    此外,您似乎可以在 is_granted 中使用 'object' 参数,它包含子资源的集合(在我的例子中,ApiPlatform\Core\Bridge\Doctrine\Orm\Paginator)。因此,如果您打算授予子资源的类或对象本身,我认为您将需要一些额外的工作(请考虑是否真的需要它)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-06-08
      • 2014-09-06
      相关资源
      最近更新 更多