Symfony перенаправить для входа через контроллер

0

Я нахожусь в центре проекта Symfony 2.5. Мой брандмауэр настроен на то, чтобы запросить устное сообщение для каждого маршрута, который имеет /secure/prefix. У меня разные типы пользователей ADMIN_ROLE, USER_ROLE и анонимные. Моя потребность в том, чтобы перенаправить каждую из них на другую страницу, если она была зарегистрирована, и на экран входа в систему, если анонимно, если попытаться ввести путь /web/app.php/

Я создал следующий маршрут:

my_home_redirect:
    pattern:  /
    defaults: { _controller: MyHomeBundle:Default:redirect }

И я создал следующий контроллер:

public function redirectAction(){
        if ($this->get('security.context')->isGranted('ROLE_ADMIN')){
             $render = $this->forward('MyHomeBundle:Installation:selectInstallation', array('userId'=>$user=$this->get('security.context')->getToken()->getUser()->getId()) );
        }
        elseif($this->get('security.context')->isGranted('ROLE_USER')){
            $render = $this->forward('MyHomeBundle:Installation:selectInstallation', array('userId'=>$user=$this->get('security.context')->getToken()->getUser()->getId()) );
        }
        else {
           // INSERT FORWARD TO THE LOGIN SCREEN
        }
        return $render;
    }

В "else" функции я shoud punt перенаправляет на экран входа, если пользователь не является администратором, а не пользователем, но логин управляется firwall symfony, определенным в security.yml, и у меня нет маршрута к тому, что. Как che перенаправить на url.../login, не имея явного счетчика loginAction?

  • 0
    Всегда есть контроллер для экрана входа в систему, и всегда есть маршрут к нему. Так какова ваша конфигурация для этого? Используете ли вы такой пакет, как FOSUserBundle ? Что говорит раздел «Маршрут» в профилировщике, когда вы находитесь в пути /login ?
Теги:
redirect

1 ответ

2
Лучший ответ

В security.yml вы можете указать login_path, например:

my_firewall:
    pattern: ^/(secured_area)/
    provider: my_provider
    anonymous: ~
    form_login:
        login_path:  my_login_path
        default_target_path: /dashboard

И в routing.yml вы можете отобразить маршрут следующим образом:

my_login_path:
    pattern:   /my/relative/url/for/login
    defaults:  { _controller: MySecurityBundle:Security:login }

то вы можете использовать обычный маршрут, в вашем конкретном случае:

return $this->forward($this->generateUrl('my_login_path'));

Надеюсь, что эта помощь

Ещё вопросы

Сообщество Overcoder
Наверх
Меню