我的用户实体有问题。我有Doctrine生成的代码,如下所示:
/**
* @var \Doctrine\Common\Collections\Collection
*
* @ORM\ManyToMany(targetEntity="Frontend\UserBundle\Entity\SfGuardPermission", inversedBy="user")
* @ORM\JoinTable(name="sf_guard_user_permission",
* joinColumns={
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @ORM\JoinColumn(name="permission_id", referencedColumnName="id")
* }
* )
*/
protected $permission;
问题在于加入,因为我无法加入用户和权限。我该怎么办?我必须将带有sf_guard_grop的sf_guard_user与带有sf_guard_permission的sf_guard_group_permission一起加入sf_guard_user。因为我需要获得用户许可。我不是没有如何在上面的代码中写这样的连接。有可能吗?
答案 0 :(得分:1)
您无法在一个注释中编写此连接。实际上,您已经有三个实体表sf_guard_user
,sf_guard_group
和sf_guard_permission
以及两个可以在您已经开始时编写的交叉表sf_guard_user_group
和sf_guard_group_permission
。
但是因为看起来你试图将一些symfony 1.x的东西迁移到symfony 2.x:
symfony 1.x中的sf_guard_user_permisson
表是用户和权限之间的交叉表,包含未通过用户所在组授予的用户的非凡权限,因此您已完成。
答案 1 :(得分:1)
SBH thx for replay,当然你对所写的一切都是正确的。但是我的sf_guard_user_permisson是空的,所以我无法使用它。我可以生成这个表,这没问题,但是我必须保持它。这是我的下一步工作,所以我写下面的代码:
namespace Frontend\UserBundle\Entity;
// ...
/**
* @var \Doctrine\Common\Collections\Collection
*
*/
protected $permissions;
/**
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getPermissions()
{
$groups = $this->getSfGuardGroups();
foreach ($groups as $group)
{
$groupPermisions = $group->getPermission();
foreach ($groupPermisions as $groupPermision)
{
if (!in_array($groupPermision, $this->permissions)) {
$this->permissions[] = $groupPermision;
}
}
}
return $this->permissions;
}
/**
* @param string $permissionName
* @return boolean
*/
public function hasPermission($permissionName)
{
$this->getPermissions();
foreach ($this->permissions as $permission)
{
if($permission->getName() === $permissionName) {
return true;
}
}
return false;
}
// ..
你怎么看?你的意见对我来说非常重要。
编辑: 对于SBH的帮助,我得到了我的问题的答案。我希望它会帮助其他人。如果您不明白,请查看SBH答案。