多个is_granted的项目操作不起作用-api平台

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

我正在尝试通过允许其担任3个角色来保护我在实体上的发布操作。 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."},
 *     },
 * )
 */

删除操作按预期方式工作,但是当我从具有ROLE_LEADER的用户发布数据时,我仍然无法理解为什么仍可以创建用户。

谢谢您的时间

symfony4 api-platform.com
1个回答
0
投票

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

[因此,is_granted('ROLE_ADMIN') or is_granted('ROLE_USER')表示已授予任何登录用户访问权限(由于[C​​0]的原因),这也是为什么具有or is_granted('ROLE_USER')的用户仍可以发布数据的原因(因为该用户将[[也]]具有角色[ C0])。 一种解决方案是创建另一个用户角色并改用该角色。

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