FOSUserBundle允许访问整个站点

时间:2015-04-09 17:47:39

标签: symfony redirect fosuserbundle

家伙! 我试图为我的Symfony应用程序配置用户系统(FOSUserBundle)。一切顺利,直到我尝试允许访问整个站点并使用安全配置文件中的访问控制限制对某些路由的访问。

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            default_target_path: /
        logout:       true
        anonymous:    true

access_control:

    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/profile$, roles: ROLE_USER }
    - { path: ^/admin$, roles: ROLE_ADMIN }

我也试过了

  

#    - {path:^ /。*,roles:IS_AUTHENTICATED_ANONYMOUSLY}   #

当我转到索引页面(/)时,它会将我重定向到登录页面。我希望所有访问者都能看到索引页面,而不仅仅是那些登录的人。

只是想不通这一刻。谢谢你的回答。

3 个答案:

答案 0 :(得分:2)

试试这个:

access_control:
    - { path: ^/profile$, roles: ROLE_USER }
    - { path: ^/admin$, roles: ROLE_ADMIN }
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }

答案 1 :(得分:0)

您的问题可能与尝试将角色指定为角色数组有关,但您只提供一个值:

- { path: ^/*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile$, role: ROLE_USER }
- { path: ^/admin$, role: ROLE_ADMIN }

您需要更多角色[]

答案 2 :(得分:0)

我解决了这个问题。对不起我的愚蠢,我已经徘徊了2天,为什么会这样。 重定向来自控制器。我的错,抱歉。无论如何,谢谢你的答案。

public function startAction()
{
    $user = $this->getUser();
    if ($user) {
        return $this->render('HellfireCommonBundle:Index:index.html.twig', array('user' => $user));
    } else {    
        return $this->redirect($this->generateUrl('fos_user_security_login'));
    }
}