FOSUserBundle access_control允许用户访问被拒绝的页面

时间:2014-01-21 00:04:02

标签: symfony fosuserbundle

我已经使用FOSUserBundle很长一段时间了,但这件事从来没有发生在我身上。似乎防火墙无法正常工作,因为我可以访问我网站上的任何页面,而我只能在访问ANONYMOUS时被重定向到登录页面。

所以,这是我的安全文件:

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

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

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

    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
        logout:
          invalidate_session: false
        anonymous:    true

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

这是我的config.yml文件:

 #v1.0
 imports:
    - { resource: parameters.yml }
    - { resource: security.yml }

 fos_user:
    db_driver: orm
    firewall_name: main
    user_class: My\Bundle\Entity\User

所以,从我看到的地方,一切都配置正确所以它应该按预期工作。但是,这种情况并没有发生。所以,问题是:我应该在哪里寻找任何冲突的配置文件,或冲突的实体等?因为我在这里问了几个小时之后才问这个问题(我不想问一个愚蠢的问题),但我无法弄清楚会发生什么。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您的问题:

正确的ACL属性为roles而不是role

工作示例:

security:
    # ...
    access_control:
        # ...
        - { path: ^/, roles: ROLE_USER }
        - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_TRANSLATOR] }

<强>解释

由于属性名称错误,实际上没有配置强制角色。

这就是原因 - 因为您anonymous设置为true - 目前无限制地授予访问权限。

请查看文档章节Securing specific URL patterns