在我的Web应用程序中,我希望我的用户能够创建角色并动态地向其添加用户。我唯一想到的是每次编辑security.yml,但这不是最好的解决方案,可以吗?如果像角色的用户提供程序这样的东西会非常好,所以我可以定义一个从数据库(doctrine)加载角色的东西。
感谢您的帮助,hice3000。
答案 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,您无法将角色中的用户序列化为用户中的角色。请阅读他的帖子,我想你会理解:)