Я пытаюсь дать каждому зарегистрированному зарегистрированному пользователю роль 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 }
Но когда я зарегистрировать новый пользователь, ничего не происходит. Роли не устанавливаются.
Любая помощь будет оценена по достоинству.
Просто попробовал это. Тем не менее роль не добавляется. –
@RafaelAdel прочитал [этот ответ] (http://stackoverflow.com/questions/18779655/fosuserbundle-admin-area-not-accessible-after-login), в котором говорится, что * По умолчанию созданный пользователь имеет роль ROLE_USER, которая сохраненный в БД, как пустой массив, преобразованный в JSON a: 0: {} * попробуйте 'var_dump ($ this-> getRoles())' после создания пользователя –
А, я понял. Я попытался добавить роль ROLE_ADMIN, и это сработало. Большое спасибо за ваши усилия. –