1

In my web application, I want my user's to be able to create roles and add users to them dynamically. The only thing I imagine, is to edit the security.yml every time, but this can't be the best solution, can it? It would be very nice, if there is something like a User Provider for roles, so I can define one which loads the roles from a database (doctrine).

Thanks for your help, hice3000.

4

1 回答 1

1

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

你必须知道 Symfony2 也提供对动态角色的支持。您在 API Doc 的 Symfony2 User 规范中有一个getRoles()方法,您的 User 实体应该实现该方法,这迫使他返回角色。这些角色必须要么实现指定方法的角色接口,该方法通常返回角色名称本身。getRole()

然后,您可以将新创建​​的角色直接添加到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 在 github 上评论的那样,您不能序列化角色中的用户,也不能序列化用户中的角色。看看他的帖子,我想你会明白的:)

于 2013-07-17T15:48:14.373 回答