我正在尝试通过允许其担任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的用户发布数据时,我仍然无法理解为什么仍可以创建用户。
谢谢您的时间
每个登录的用户始终至少具有ROLE_USER
角色。有关更多信息,请参见documentation。
[因此,is_granted('ROLE_ADMIN') or is_granted('ROLE_USER')
表示已授予任何登录用户访问权限(由于[C0]的原因),这也是为什么具有or is_granted('ROLE_USER')
的用户仍可以发布数据的原因(因为该用户将[[也]]具有角色[ C0])。 一种解决方案是创建另一个用户角色并改用该角色。