我是否需要在symfony2中将“Role”类声明为array或arrayCollection?

时间:2012-07-19 08:22:18

标签: php symfony doctrine-orm

我有这种情况:

  • User将属于Groups
  • Groups将有某些Roles

现在我想知道我需要在Group.php

中声明这一点

这是Group.php,这是Role.php

$this->roles = new \Doctrine\Common\Collections\ArrayCollection();

$this->roles = new array();

我很困惑如何使用symfony安全性。我的意思是symfony安全性需要在arraycollection或array中使用什么格式。

2 个答案:

答案 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)

那么,您的问题是ArrayArrayCollection

使用ArrayCollection,因为它在ORM的上下文中做得更好,并且更容易扩展/操作(参见:Doctrine Collections)。

有关在Doctrine中设置集合的详细信息,请参阅Initializing Collections 在文档中。


<强> FOSUserBundle

您可能还想考虑使用优秀的Friends of Symfony (FOS)UserBundle。这完全支持GroupsRoles

访问控制列表(ACL)

您可能还想查看ACL:

  

在复杂的应用程序中,您经常会遇到这样的问题:访问决策不仅可以基于请求访问的人(令牌),而且还涉及正在请求访问的域对象。这就是ACL系统的用武之地。

Symfony2 - Access Control Lists