我已经关注了Symfony2 Security documentation并让实体,数据库和表单做了他们的事情。麻烦的是,我的数据库中没有任何用户,因此我完成了Registration Documentation中的步骤,但在我看来,这些应该更好地连接。注册文档没有说明角色。在我看来,分配默认角色的最佳时间是在用户注册期间。这就是我之后的事情,但考虑到用户实体没有任何添加角色的方法,我对如何做到这一点有点失落。我的问题是如何在注册期间为用户分配一个默认角色(" ROLE_USER")?
相关守则:
用户实体:http://pastebin.com/zi8nWGb8
角色实体:http://pastebin.com/Q8D5kB0A
UserRepository:http://pastebin.com/BLfAjgkt
注册和登录操作:http://pastebin.com/rdbAcBXu
signupCreateAction是我怀疑应该发生魔法的地方,或者可能是在用户实体的__construct()
方法中。我只是迷失了正确的方法。
答案 0 :(得分:1)
首先要做两件事。您需要为这两个类创建访问器方法。这意味着创建:
/**
* ...
*/
class TblUser
{
// ...
public function getRoles()
{
return $this->roles->toArray();
}
public function setRoles(Collection $roles)
{
foreach ($roles as $role) {
$this->addRole($role);
}
}
public function addRole(TblPrivilege $role)
{
if (!$this->roles->contains($role)) {
$this->roles->add($role);
$role->addUser($this);
}
}
public function removeRole(TblPrivilege $role)
{
if ($this->roles->contains($role)) {
$this->roles->removeElement($role);
$role->removeUser($this);
}
}
}
/**
* ...
*/
class TblPrivileges
{
// ...
public function getUsers()
{
return $this->users;
}
public function setUsers(Collection $users)
{
foreach ($users as $user) {
$this->addUser($user);
}
}
public function addUser(TblUser $user)
{
if (!$this->users->contains($user)) {
$this->users->add($user);
}
}
public function removeUser(TblUser $user)
{
if ($this->users->contains($user)) {
$this->users->removeElement($user);
}
}
}
对于实际调用$ user-> addRole()方法,我实际上会选择一个Doctrine事件订阅者,它实际上会在persist上获取默认角色(因此,在注册期间)。这在Doctrine documentation上有详细记载。
要注册活动订阅者,您应该查看Symfony documentation:
答案 1 :(得分:0)
我使用FOSUserBundle来管理用户和角色。他们有一个名为Groups的工具,可以让您管理数据库中的角色。也就是说这不应该让自己卷起来。
FOSUserBundle提供了管理用户所需的大部分内容。
答案 2 :(得分:0)
您也可以在用户实体中尝试此操作
private $roles = array();
/**
* Returns the roles or permissions granted to the user for security.
*/
public function getRoles()
{
$roles = $this->roles;
// guarantees that a user always has at least one role for security
if (empty($roles)) {
$roles[] = 'ROLE_USER';
}
return array_unique($roles);
}
public function setRoles($roles)
{
$this->roles = $roles;
}