0

我在我的 symfony2 项目中安装了 FOS UserBundle。登录/注销有效,唯一的问题是,系统不会重定向/关闭我想要关闭的部分。整个站点只能由登录用户访问。然而我可以打电话给任何路线。

我在我的安全yml的访问控制部分填写了数据,但它不起作用。我可以调用 mydomain/de_CH/anything/i/want/ 并访问该内容。

这是我的security.yml:

security:
  providers:
    fos_userbundle:
      id: fos_user.user_provider.username_email

  encoders:
    FOS\UserBundle\Model\UserInterface: sha512

  firewalls:
    main:
      pattern: ^/
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login 
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout
      anonymous:    true

  access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/my-admin/, role: ROLE_ADMIN }
    - { path: ^/$, role: ROLE_USER }
    #- { path: ^/$, role: ROLE_USER }

  role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN
4

2 回答 2

0

移除该anonymous: true部件并放入/login它自己的防火墙,以便用户可以登录。该anonymous部件允许匿名用户访问该防火墙。

firewalls:
    login_firewall:
        pattern:    ^/login$
        anonymous:  ~
    main:
        pattern: ^/
        form_login:
            # ...
        logout:
            path:   fos_user_security_logout

编辑:由于我们拒绝匿名用户访问该页面,我们需要创建单独的防火墙,/login否则他们将无法登录。请参阅官方文档中的“避免常见陷阱”部分:http: //symfony.com/ doc/current/book/security.html以获取有关该主题的更多信息。

于 2013-03-05T09:22:31.430 回答
0

改变

- { path: ^/$, role: ROLE_USER }

 - { path: ^/.*, role: ROLE_USER }

这是因为,第一个正则表达式告诉您允许ROLE_USER使用该模式进行路径/
因此,诸如此类/foo /foo/bar的模式不会从您的防火墙中捕获。

第二种模式覆盖后一种情况

于 2013-03-05T09:19:55.663 回答