1

私は Symfony 用の FOSUser Bundle を使用しています...私の質問は; ユーザーのグループが 2 つあります。たとえば、次のようになります。システムへの登録時に設定される教師と生徒。(FOSUser Bundle の user テーブルを使用)

ログインに成功した後、ユーザーに正しいランディングページに移動してもらいたい..したがって、ユーザーが教師の場合、ユーザーは /teacher に、学生の場合は /student に移動します。

これにアプローチする最良の方法は何ですか?

ありがとう

4

1 に答える 1

4

ログインイベントをリッスンするには、イベントリスナーが必要です。次に、役割に基づいてクライアントを別のページにルーティングできます。

services.yml:

services:
    login_listener:
        class: Acme\UserBundle\Listener\LoginListener
        arguments: [@security.context, @doctrine]
        tags:
            - { name: kernel.event_listener, event: security.interactive_login }

LoginListener:

<?php

namespace Acme\UserBundle\Listener;

use Symfony\Component\EventDispatcher\Event;
use Symfony\Component\Security\Core\SecurityContext;
use Doctrine\Bundle\DoctrineBundle\Registry as Doctrine; // for Symfony 2.1.x
// use Symfony\Bundle\DoctrineBundle\Registry as Doctrine; // for Symfony 2.0.x

/**
 * Custom login listener.
 */
class LoginListener
{
    /** @var \Symfony\Component\Security\Core\SecurityContext */
    private $securityContext;

    /** @var \Doctrine\ORM\EntityManager */
    private $em;

    /**
     * Constructor
     * 
     * @param SecurityContext $securityContext
     * @param Doctrine        $doctrine
     */
    public function __construct(SecurityContext $securityContext, Doctrine $doctrine)
    {
        $this->securityContext = $securityContext;
        $this->em              = $doctrine->getEntityManager();
    }

    /**
     * Do the magic.
     * 
     * @param  Event $event
     */
    public function onSecurityInteractiveLogin(Event $event)
    {
        if ($this->securityContext->isGranted('ROLE_1')) {
            // redirect 1
        }

        if ($this->securityContext->isGranted('ROLE_2')) {
            // redirect 2
        }

        // do some other magic here
        $user = $this->securityContext->getToken()->getUser();

        // ...
    }
}

差出人:http ://www.metod.si/login-event-listener-in-symfony2/

于 2013-02-05T18:46:50.843 に答える