我有这种情况:
User
将属于Groups
Groups
将有某些Roles
现在我想知道我需要在Group.php
中声明这一点$this->roles = new \Doctrine\Common\Collections\ArrayCollection();
或
$this->roles = new array();
我很困惑如何使用symfony安全性。我的意思是symfony安全性需要在arraycollection或array中使用什么格式。
答案 0 :(得分:3)
Symfony 2期望array
Role
getRoles()
作为User
方法中的返回值。由于Group
可以包含多个Role
,并且每个群组可能有多个/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User
{
/* @ORM\ManyToMany(targetEntity="Group", inversedBy="users") */
private $groups;
public function __construct()
{
$this->groups = new \Doctrine\Common\Collections\ArrayCollection();
}
public function getRoles()
{
$roles = array();
foreach($this->groups as $group) :
$roles = array_merge($roles, $group->getRoles()->toArray());
endforeach;
return $roles;
}
}
,我会这样做:
{{1}}
答案 1 :(得分:1)
那么,您的问题是Array
或ArrayCollection
?
使用ArrayCollection,因为它在ORM的上下文中做得更好,并且更容易扩展/操作(参见:Doctrine Collections)。
有关在Doctrine中设置集合的详细信息,请参阅Initializing Collections 在文档中。
<强> FOSUserBundle 强>
您可能还想考虑使用优秀的Friends of Symfony (FOS)UserBundle。这完全支持Groups
和Roles
。
访问控制列表(ACL)
您可能还想查看ACL:
在复杂的应用程序中,您经常会遇到这样的问题:访问决策不仅可以基于请求访问的人(令牌),而且还涉及正在请求访问的域对象。这就是ACL系统的用武之地。