2013-11-29 2 views
3

Я пытаюсь дать каждому зарегистрированному зарегистрированному пользователю роль ROLE_USER. Я новичок в FOSUserBundle, поэтому из того, что я прочитал в документации, это делается путем отвлечения логики в контроллеры.В FOSUserBundle, как изначально установить роль пользователя в событии REGISTRATION_COMPLETED?

Вот мой слушатель NewUserGroupSet События:

<?php 
namespace Tsk\TstBundle\EventListener; 

use Doctrine\ODM\MongoDB\DocumentManager; 
use FOS\UserBundle\Doctrine\UserManager; 
use FOS\UserBundle\Event\FilterUserResponseEvent; 
use FOS\UserBundle\FOSUserEvents; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 

class NewUserGroupSet implements EventSubscriberInterface 
{ 
    protected $um; 
    protected $dm; 
    public function __construct(UserManager $um, DocumentManager $dm) 
    { 
     $this->um = $um; 
     $this->dm = $dm; 
    } 

    public static function getSubscribedEvents() 
    { 
     return array(
      FOSUserEvents::REGISTRATION_COMPLETED => "onRegistrationSuccess", 
     ); 
    } 

    public function onRegistrationSuccess(FilterUserResponseEvent $event) 
    { 
     $user = $event->getUser(); 
     $user->setRoles(array('ROLE_USER')); 
     $this->um->updateUser($user); 
     $this->dm->flush(); 
    } 
} 
?> 

И регистрируется как сервис следующим образом:

parameters: 
    tsk_user.group_set.class: Tsk\TstBundle\EventListener\NewUserGroupSet 

services: 
    tsk_user.group_set: 
     class: %tsk_user.group_set.class% 
     arguments: [@fos_user.user_manager, @doctrine.odm.mongodb.document_manager] 
     tags: 
      - { name: kernel.event_subscriber } 

Но когда я зарегистрировать новый пользователь, ничего не происходит. Роли не устанавливаются.

Любая помощь будет оценена по достоинству.

ответ

7

Вы пытались дозвониться addRole() FOSUser функции лица, если вы заметили функцию setRole в сущности это цикл через массив к роли и передавая ее addRole

public function setRoles(array $roles) 
{ 
    $this->roles = array(); 

    foreach ($roles as $role) { 
     $this->addRole($role); 
    } 

    return $this; 
} 

Попробуйте с addRole() для одной роли

public function onRegistrationSuccess(FilterUserResponseEvent $event) 
{ 
    $user = $event->getUser(); 
    $user->addRole('ROLE_USER'); 
    $this->um->updateUser($user); 
    $this->dm->flush(); 
} 
+0

Просто попробовал это. Тем не менее роль не добавляется. –

+8

@RafaelAdel прочитал [этот ответ] (http://stackoverflow.com/questions/18779655/fosuserbundle-admin-area-not-accessible-after-login), в котором говорится, что * По умолчанию созданный пользователь имеет роль ROLE_USER, которая сохраненный в БД, как пустой массив, преобразованный в JSON a: 0: {} * попробуйте 'var_dump ($ this-> getRoles())' после создания пользователя –

+2

А, я понял. Я попытался добавить роль ROLE_ADMIN, и это сработало. Большое спасибо за ваши усилия. –

Смежные вопросы