2014-02-21 78 views
1

在我正在开发的应用程序中,我对安全组件的访问控制有一个奇怪的问题。Symfony2访问控制重定向登录

我用FOSUserBundle为用户和(当然)我复制从包的文档的例子中的访问控制规则,我security.yml登录屏幕(/login)的作品完美,但问题是,所有其他的访问控制规则绝对没有无论效果如何。例如,当用户转到/register时,他被重定向到/login/resetting也是如此。

这是我security.yml文件:

jms_security_extra: 
    secure_all_services: false 
    expressions: true 

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: sha512 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username_email 

    firewalls: 
     dev: 
      pattern: ^/(\_(profiler|wdt)|css|images|js)/ 
      security: false 

     api: 
      pattern: ^/api 
      anonymous: false 
      form_login: false 
      provider: fos_userbundle 
      http_basic: 
       realm: "REST Service Realm" 

     main: 
      pattern: ^/ 
      form_login: 
       provider: fos_userbundle 
       csrf_provider: form.csrf_provider 
      logout:  true 
      anonymous: ~ 
      switch_user: { role: ROLE_SUPER_ADMIN, parameter: _impersonate } 

    access_control: 
     - { path: ^/login, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/superadmin/, role: ROLE_SUPER_ADMIN } 

我试图含有/resetting/register,路径转向安全性,而且明确将无法正常工作,因为安全令牌仍然需要可用于FOSU​​serBundle控制器。

任何帮助将不胜感激!

+0

path:^/register不是用来检测寄存器和重置页面吗? – VBee

+0

哦,是的,应该是,'path:^/register(。*)'是我改变尝试让它工作的东西。原来它的确是'路径:^/register'。我会编辑我原来的问题。 –

+0

你使用dev env?缓存清楚吗? – VBee

回答

0

的问题是,另一束是与每个请求检查如果用户登录或不搞乱。如果用户未登录,则会向登录页面生成重定向响应。

不知道为什么这样做,我认为它来自原始作者对Symfony较少经验的时代。

但是所以它再次证明,总是检查日志。很彻底。

0

它可能与access_control的顺序有关,请尝试将superadmin放在其他位置。您也似乎没有有secured_area部分(像这样的例子来自Symfony2 access control redirects to login

security: 
    firewalls: 
     secured_area: 
      pattern: ^/ 
      anonymous: ~ 
      form_login: 
       login_path: login 
       check_path: login_check 
+0

谢谢!我试着把superadmin放在另一个之上,但无济于事!另外,我的'main'防火墙与'secured_area'防火墙几乎一样,所以我不认为这是问题,但值得一试! __EDIT__:没有,用'secured_area'替换'main'时没有效果。 –

+0

哦是的对不起,我看到你已经使用'主'而不是'secured_area' 您是否尝试过在进行更改后刷新缓存?我可能是错的,但我认为在安全更改后这将是必要的 – timhc22

+0

刚刚尝试过,无论是用控制台还是手动,但它也不起作用。难道是另一个软件包搞乱了防火墙吗? –