2017-05-11 26 views

回答

1

爲了能夠堅持在數據庫中的一個必要的默認角色覆蓋用戶:: setRoles()方法到您的用戶實體:

public function addRole($role) 
    { $role = strtoupper($role); 

    if (!in_array($role, $this->roles, true)) { 
     $this->roles[] = $role; 
    } 

    return $this; 
} 

療法的2其他的想法做TRIC:
1)easyest方法是重寫實體構造:

public function __construct() 
{ 
    parent::__construct(); 
    $this->roles = array('ROLE_USER'); } 

2)第二個方法是將註冊事件監聽器在REGISTRATION_SUCCESS事件並使用$event->getForm()->getData()訪問用戶,並修改它,看看:

// src/Acme/DemoBundle/EventListener/RegistrationListener.php 
namespace Acme\DemoBundle\EventListener; 

use FOS\UserBundle\FOSUserEvents; 
use FOS\UserBundle\Event\FormEvent; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
enter code here 
class RegistrationListener implements EventSubscriberInterface 
{ 
    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::REGISTRATION_SUCCESS => 'onRegistrationSuccess', 
     ); 
    } 

    public function onRegistrationSuccess(FormEvent $event) 
    { 
     $rolesArr = array('ROLE_USER'); 

     /** @var $user \FOS\UserBundle\Model\UserInterface */ 
     $user = $event->getForm()->getData(); 
     $user->setRoles($rolesArr); 
    } 
} 

此外,需要按照如下方式註冊的服務:

// src/Acme/DemoBundle/Resources/config/services.yml 
services: 
    demo_user.registration_listener: 
     class: Acme\DemoBundle\EventListener\RegistrationListener 
     arguments: [] 
     tags: 
      - { name: kernel.event_subscriber }