我想他是注册后默认角色分配给用户。 我已经实现FOSUserBundle通过SonataUserBundle延长。 偏偏SonataUserBundle需要FOSUserBundle〜1.3和事件侦听器只是因为FOSUserBundle 2.0。
有另一种方式来解决不同的事件监听或FOSUserBundle控制器覆盖这个问题? 也许某种在YAML选项的我错过了什么? 它似乎相当标准的问题,但我仍然在Symfony2的新...
我想他是注册后默认角色分配给用户。 我已经实现FOSUserBundle通过SonataUserBundle延长。 偏偏SonataUserBundle需要FOSUserBundle〜1.3和事件侦听器只是因为FOSUserBundle 2.0。
有另一种方式来解决不同的事件监听或FOSUserBundle控制器覆盖这个问题? 也许某种在YAML选项的我错过了什么? 它似乎相当标准的问题,但我仍然在Symfony2的新...
您可以覆盖getRoles(),您的用户类的方法:
public function getRoles()
{
$roles = parent::getRoles();
if ($this->enabled) {
switch ($this->type) {
case self::TYPE_1:
$roles[] = 'ROLE_TYPE_1';
break;
case self::TYPE_2:
$roles[] = 'ROLE_TYPE_2';
break;
}
}
return array_unique($roles);
}
编辑:增加每用户类型的角色
你可以做到这一点使用下面的方法prePersist:
/**
* @ORM\Entity
* @ORM\Table(name="user_users")
* @ORM\HasLifecycleCallbacks()
*/
class User extends BaseUser
{
...
/**
* @ORM\PrePersist()
*/
public function setDefaultRole(){
$this->addRole( 'ROLE_NAME' );
}
}
该prePersist启动实体被存储在数据库中之前,当你创建一个用户元素。 你可以在阅读有关此http://docs.doctrine-project.org/en/2.0.x/reference/events.html
来晚了,但你完全可以覆盖你的用户类的构造函数。 我假设你延长Sonata\UserBundle\Entity\BaseUser
所以你的代码应该是:
namespace Acme\UserBundle\Entity;
use Sonata\UserBundle\Entity\BaseUser as BaseUser;
class User extends BaseUser
{
public function __construct()
{
parent::__construct();
$this->roles = array('ROLE_ADMIN');
}
}
你必须使用parent::_construct
否则将角色分配索纳塔登记控制器将覆盖角色之前。 希望能帮助到你 :)