簡體   English   中英

在FOSUserBundle中,如何在REGISTRATION_COMPLETED事件中初始設置用戶角色?

[英]In FOSUserBundle, How to initially set user role on REGISTRATION_COMPLETED event?

我試圖給每個成功注冊的用戶一個ROLE_USER角色。 我是FOSUserBundle的新手,所以從我在文檔中看到的內容來看,它是通過將邏輯插入控制器來完成的。

這是我的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 }

但是當我注冊一個新用戶時,什么也沒發生。 沒有任何角色被設置。

任何幫助,將不勝感激。

您是否嘗試過調用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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM