如何在api平台上“验证” DELETE请求

时间:2019-08-09 19:18:06

标签: api-platform.com

我想检查实体变量并检查是否允许删除该实体。例如,如果关联的所有者实体链接到另一个实体,则我想使删除成为不可能。

我查看了api平台的文档bu,但找不到关于我的问题的任何帮助。您有权删除或不删除。我找不到如何控制它(等同于POST,PUT和PATCH的验证)。

1 个答案:

答案 0 :(得分:0)

您可以使用Api平台和Symfony表达语言的访问控制功能来实现所需的功能。这样,您就可以编写非常复杂的表达式。

我希望这个例子能清楚说明。 user是当前登录的用户。 对象是用户正在尝试删除的资源。

/**
 * @ApiResource(
 *   itemOperations={
 *     "delete"={
 *       "access_control"="is_granted('ROLE_USER') and object.getUsers().contains(user),
 *     }
 *   }
 * )
 */

class Entity
{
    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="User", inversedBy="entities")
     * @ORM\JoinTable(name="entity_users")
     */
    private $users;

    /**
     * @return ArrayCollection
     */
    public function getUsers(): ArrayCollection
    {
        return $this->users;
    }
}

在这种情况下,只有存储在用户实体数组中的用户才能删除此资源。