【发布时间】:2020-04-03 08:29:14
【问题描述】:
我在多对多关系中有两个实体用户和产品。 在投票者内部,如果用户在 $product->getUsers 中,我想授予对产品的删除权限。 到目前为止,我设法做这样的事情
foreach ($user->getProducts() as $userProduct) {
foreach ($userProduct->getUsers() as $productUser) {
if($productUser->getId() === $user->getId()) {
return true;
break;
}
}
}
用户变量是:
$user = $token->getUser();
我检查是否是:
// if the user is anonymous, do not grant access
if (!$user instanceof UserInterface) {
return false;
}
每个用户都有一个产品集合 -> 此集合中的每个产品都有一个用户集合。
我使用代码检查产品的用户集合的 id 中是否存在当前经过身份验证的用户 ($user->getId()) 的 id:
if($productUser->getId() === $user->getId()) {
return true;
break;
}
然后我退出循环。如果不是,则拒绝访问。
有没有更好、更优雅、更高效的方式来完成这项任务? 我应该为此目的使用任何内置的 Symfony 方法吗?
【问题讨论】:
-
你得到用户产品,然后你得到产品用户,这意味着这个检查
$productUser->getId() === $user->getId()最终将返回 true,所以你的代码 sn-p 根本不检查任何东西 -
我建议你把整个代码贴出来
-
@LuninRoman 我的 === 没有意义?很可能我做错了。
-
感觉你从错误的角度考虑问题,你应该将一个产品用户与当前登录的用户进行比较。尝试先编写测试并完成场景
-
不需要循环。你可以像这样检查它
if ($product->getUsers()->contains($user)) {...}
标签: arrays symfony foreach collections doctrine