-->

我怎么可以指定默认的角色,以用户的Symfony2(How can I assign default

2019-10-30 07:52发布

我想他是注册后默认角色分配给用户。 我已经实现FOSUserBundle通过SonataUserBundle延长。 偏偏SonataUserBundle需要FOSUserBundle〜1.3和事件侦听器只是因为FOSUserBundle 2.0。

有另一种方式来解决不同的事件监听或FOSUserBundle控制器覆盖这个问题? 也许某种在YAML选项的我错过了什么? 它似乎相当标准的问题,但我仍然在Symfony2的新...

Answer 1:

您可以覆盖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);
}

编辑:增加每用户类型的角色



Answer 2:

你可以做到这一点使用下面的方法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



Answer 3:

来晚了,但你完全可以覆盖你的用户类的构造函数。 我假设你延长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否则将角色分配索纳塔登记控制器将覆盖角色之前。 希望能帮助到你 :)



文章来源: How can I assign default role to user in Symfony2