How to redirect to different url based on roles in symfony 2

后端 未结 6 1168
梦谈多话
梦谈多话 2020-12-02 17:37

I have one login page on site. I have 4 different tye of users and i want that when they login they go to different page based on their role assigned.

Is there any w

6条回答
  •  佛祖请我去吃肉
    2020-12-02 18:25

    For Symfony >= 2.6 now would be:

    router       = $router;
            $this->token        = $token;
            $this->dispatcher   = $dispatcher;
            $this->logger       = $logger;
        }
    
        public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
        {
            $this->dispatcher->addListener(KernelEvents::RESPONSE, [$this, 'onKernelResponse']);
        }
    
        public function onKernelResponse(FilterResponseEvent $event)
        {
            $roles = $this->token->getToken()->getRoles();
    
            $rolesTab = array_map(function($role){
                return $role->getRole();
            }, $roles);
    
            $this->logger->info(var_export($rolesTab, true));
    
            if (in_array('ROLE_ADMIN', $rolesTab) || in_array('ROLE_SUPER_ADMIN', $rolesTab)) {
                $route = $this->router->generate('backend_homepage');
            } elseif (in_array('ROLE_CLIENT', $rolesTab)) {
                $route = $this->router->generate('frontend_homepage');
            } else {
                $route = $this->router->generate('portal_homepage');
            }
    
            $event->getResponse()->headers->set('Location', $route);
        }
    }
    

    And services.yml

    services:
    common.listener.login:
        class: CommonBundle\Listener\LoginListener
        arguments: [@router, @security.token_storage, @event_dispatcher, @logger]
        scope: request
        tags:
            - { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
    

提交回复
热议问题