2012-07-19 141 views
1

我有这样的场景:我是否需要在symfony2中将“Role”类声明为array或arrayCollection?

  • 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中扮演角色的格式。

回答

3

的Symfony 2所预计和RolearraygetRoles()方法返回值。由于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

那么,你的问题是ArrayArrayCollection

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

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


FOSUserBundle

您也可以考虑使用优秀Friends of Symfony (FOS)UserBundle。这完全支持GroupsRoles

访问控制列表(ACL)

您可能还需要检查的ACL:

在复杂的应用程序,你会经常遇到访问决策的问题不能只立足于人(令牌)谁正在请求访问,但也涉及访问被请求的域对象。这是ACL系统进来。

Symfony2 - Access Control Lists

相关问题