以下是背景:
我在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)",
* },
* }
它也不起作用。
有没有人有任何线索或提示为什么选民不叫?
发布于 2020-06-16 09:39:39
只有一个小费。我认为操作将命名为"api_questions_answer_get_subresource",在您的例子中是"api_products_supplier_get_subresource“(使用"bin/console debug:路由器”检查名称)。
请参阅https://api-platform.com/docs/core/subresources/#subresources
请注意,操作名(此处为api_questions_answer_get_subresource )是重要的关键字。它将自动设置为$resources_$subresource(s)_get_subresource。要找到正确的操作名称,可以使用bin/控制台调试:_get_subresource。
而且,您似乎可以在ApiPlatform\Core\Bridge\Doctrine\Orm\Paginator).中使用'object‘参数,并且它包含子资源的集合(在我的例子中是is_granted )。因此,如果您打算授予您的子资源类,或对象本身,我认为您将需要一些额外的工作(只要考虑一下,如果您真的需要它)。
https://stackoverflow.com/questions/62154584
复制相似问题