1

我有这种情况:

  • 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 中的角色。

4

2 回答 2

3

Symfony 2 期望 和arrayofRole作为方法中的返回值getRoles()。由于 aUser可以有很多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;
    }
}
于 2012-07-19T09:23:55.420 回答
1

所以,你的问题是ArrayArrayCollection

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

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


FOSUserBundle

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

访问控制列表 (ACL)

您可能还想查看 ACL:

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

Symfony2 - 访问控制列表

于 2012-07-19T08:56:21.297 回答