禁止基于用户权限在关系字段中添加项目

问题描述

这是我先前的问题Security voter on relational entity field when not using custom subresource path

的后续活动

现在的情况是,想象您在实体UserTeam之间具有ManyToMany关系。

  • 用户1 是雇员,并且是团队A 团队B
  • 的一部分
  • 用户2 团队A 团队C
  • 的团队负责人
  • 用户2 可以更新配置文件字段(其中还包括 {strong>用户1 (或其他团队成员)
  • user.teams
  • 用户2 具有权限,可以访问read|update|delete B团队,这意味着用户2 是否打开用户1 的个人资料,他无法在团队列表中看到 TEAM B

这是为了获得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 (将#修改为@)