Symfony2:像角色提供者一样?

时间:2013-07-17 14:05:25

标签: symfony roles

在我的Web应用程序中,我希望我的用户能够创建角色并动态地向其添加用户。我唯一想到的是每次编辑security.yml,但这不是最好的解决方案,可以吗?如果像角色的用户提供程序这样的东西会非常好,所以我可以定义一个从数据库(doctrine)加载角色的东西。

感谢您的帮助,hice3000。

1 个答案:

答案 0 :(得分:1)

然后,您应该将角色实体添加到模型Hice。

您必须知道Symfony2也支持动态角色。您的用户实体应该在Symfony2 User spec in the API Doc中使用getRoles()方法,这会强制他返回角色。这些角色必须实现指定getRole()方法的role interface,该方法最常返回角色名称。

然后,您可以将新创建​​的角色直接添加到用户角色列表中,然后getRoles()用户方法将返回。

以下是使用注释的示例: 第一个角色类

/**
 * Role class
 *
 * @ORM\Entity()
 */
class Role implements RoleInterface, \Serializable
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * @ORM\ManyToMany(targetEntity="User", mappedBy="userRoles")
     */
    private $users;

    public function __construct()
    {
        $this->users = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function getRole()
    {
        return $this->name;
    }

}

用户类

/**
 * User
 *
 * @ORM\Entity()
 */
class User implements UserInterface, \Serializable
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="username", type="string", length=255)
     */
    private $username;

    /**
     * @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
     * @ORM\JoinTable(name="user_roles")
     */
    private $userRoles;

    public function __construct()
    {
        $this->userRoles = new \Doctrine\Common\Collections\ArrayCollection();
    }

    public function getRoles()
    {
        return $this->userRoles->toArray();
    }

我已经跳过导入和简化方法的方法。

编辑:关于序列化也有一些了解。作为Sharom commented on github,您无法将角色中的用户序列化为用户中的角色。请阅读他的帖子,我想你会理解:)