如何解决禁止基于用户权限在关系字段中添加项目
这是我先前的问题Security voter on relational entity field when not using custom subresource path
的后续活动现在的情况是,想象您在实体User
和Team
之间具有ManyToMany关系。
- 用户1 是雇员,并且是团队A 和团队B 的一部分
- 用户2 是团队A 和团队C 的团队负责人
- 用户2 可以更新配置文件字段(其中还包括 {strong>用户1 (或其他团队成员) 的
- 用户2 具有否权限,可以访问
read|update|delete
B团队,这意味着用户2 是否打开用户1 的个人资料,他无法在团队列表中看到 TEAM B
user.teams
)
这是为了获得read
权限而实现的。
问题
如果用户2 对用户A 发出了PUT
请求,其中请求数据user.teams
仅包含团队A 由于他无权查看 B团队,因此该API将从user.teams
中删除 B团队,因为请求数据不包含 B团队。
因此,基本上,当用户无权查看该团队时,我需要忽略/跳过user.teams
中的项目。
如果我按如下方式修改实体removeTeam
的方法User
,从理论上讲这很容易做到:
public function removeTeam(Team $team): self
{
if ($this->teams->contains($team) && $this->userService->canRemoveFromTeam($this,$team)) {
$this->teams->removeElement($team);
}
return $this;
}
但是我听说道德上禁止修改实体。
我遇到了PATCH
请求,这可能只是解决方案的一小部分,但是我对如何实现它尚不清楚,因为我没有找到关于该主题的任何有用信息,因为我希望在github上有一些功能请求
因此,如果有人可以帮助我以正确的方式做到这一点,请教我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。