多个项目操作 is_granted 不工作 - api 平台

item operations multiple is_granted not working - api platform

我试图通过允许 3 个角色来保护我对实体的 post 操作。 ROLE_ADMIN、ROLE_USER 和 ROLE_LEADER。每个用户只有一个角色。

当我通过从下面的代码中删除 ROLE_LEADER 来测试它是否有效时,我发现具有 ROLE_LEADER 的用户仍然可以创建用户。

如果发生了变化,我试图犯一些错误,他们是。

我有以下操作:

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @ApiResource(
 *    itemOperations={
 *         "post"={"access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_USER')", "access_control_message"="You are not owner of this user."},
 *         "delete"={"access_control"="
                is_granted('ROLE_ADMIN')
                or (is_granted('ROLE_USER') and (previous_object.getOwner() == user or previous_object.getOwner().getOwner() == user))
                or (is_granted('ROLE_LEADER') and previous_object.getOwner() == user)
            ", "access_control_message"="You are not owner of this user."},
 *     },
 * )
 */

删除操作按预期进行,但是我无法理解为什么当我 post 从具有 ROLE_LEADER.

的用户获取数据时仍然可以创建用户

感谢您的宝贵时间

每个登录的用户始终至少具有角色 ROLE_USER。有关详细信息,请参阅 documentation

因此 is_granted('ROLE_ADMIN') or is_granted('ROLE_USER') 意味着任何登录用户都被授予访问权限(因为 or is_granted('ROLE_USER') ),这也是为什么您的 ROLE_LEADER 用户仍然可以 post 数据(因为此用户 具有角色 ROLE_USER)。

一种解决方案是创建另一个用户角色并改用该用户角色。

解决办法是我需要搬家

"post"={"access_control"="is_granted('ROLE_ADMIN') or is_granted('ROLE_USER')", "access_control_message"="You are not owner of this user."},

从 itemOperations 到 collectionOperations