Symfony2主页与经过身份验证的用户不同

时间:2015-09-02 20:40:06

标签: symfony

如何定义Symfony2路由以针对经过身份验证的用户和未经身份验证的用户显示不同的主页?例如,我想在 routing.yml 文件中执行类似的操作:

homepage_authenticated:
    path:     /
    defaults:
        _controller: AcmeBundle:Home:homeAuthenticated
    requirements:
        user: is_authenticated_remembered   # <--- this part here

homepage:
    path:     /
    defaults:
        _controller: AcmeBundle:Home:home

现在显然这不起作用,因为我刚刚发明了它,但我确信必须有办法做到这一点,但我找不到它。我有一个想法Expressions可能会以某种方式解决这个问题,但我无法在任何地方找到任何实际使用的示例。

1 个答案:

答案 0 :(得分:1)

正如Malcom在评论中所建议的那样,最好根据用户在控制器中的身份验证状态来处理重定向/页面呈现。 安全上下文保存角色相关数据和身份验证状态。您可以通过检查将用户重定向到不同的页面  $this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')$this->get('security.context')->isGranted('ROLE_NAME')

例如:

public function homeAction()
    {
        $em = $this->getDoctrine()->getEntityManager();
        if ($this->get('security.context')->isGranted('IS_AUTHENTICATED_FULLY')) {

            //Path handling for authenticated users
            if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
                return $this->redirect($this->generateUrl('admin_homepage'));
            }

            if ($this->get('security.context')->isGranted('ROLE_USER')) {

                return $this->render('VenomCoreBundle:Default:home.html.twig', array(
                        'notifications' => $notifications,
                        'unApprovedCount' => $unApprovedCount,
                        'status' => $stats,
                ));
            }
        }
        //non authenticated users are redirected here
        return $this->render('VenomCoreBundle:Default:login.html.twig');
    }