Symfony 2 - 防火墙和访问控制问题

4

我在Symfony 2安全组件中遇到了一个奇怪的问题。由于{{ app.user }}对象仅在受保护区域内可用,因此我将防火墙模式设置为^/。现在我想要“取消保护”一些页面,例如注册页面。我尝试使用access_control来实现,但它不起作用。

这是我的security.yml文件:

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

    login:
        pattern:  ^/account/login$
        security: false

    account_area:
        pattern:    ^/
        form_login:
            check_path: /account/login_check
            login_path: /account/login
            default_target_path: /account
        remember_me:
            key:      blaBlubKey
            lifetime: 3600
            path:     /
            domain:   ~
        logout:
            path:   /account/logout
            target: /

access_control:
    #works
    - { path: ^/backend, roles: ROLE_USER }
    #works not
    - { path: ^/registration, roles: IS_AUTHENTICATED_ANONYMOUSLY }

提前感谢您!

2个回答

11
值得一提的是,这里的最佳实践是只使用一个带有access_control的防火墙用于登录页面。为什么呢?如果已登录的用户尝试访问/login页面,你将会怎么做呢?你将无法在控制器中检查其是否已经通过身份验证并将其重定向,因为该用户已通过主要防火墙进行了身份验证,但未通过登录防火墙进行身份验证,因为它们是独立的安全系统。

这是我的security.yml,对我来说非常有用:

security:
    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: true
            anonymous: ~ 
        secured_area:
            pattern:    ^/
            anonymous:  ~
            form_login:
                login_path:  /login
                check_path:  /login_check
                always_use_default_target_path: true
                default_target_path: /
            logout:
                path:   /logout
                target: /
    providers:
        main:
            entity: { class: Core\UserBundle\Entity\User, property: username }
    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_SUPERADMIN }
        - { path: ^/user, roles: ROLE_USER }
        - { path: ^/, roles: IS_AUTHENTICATED_FULLY }

1
太棒了!这正是我所想的,而且我得到了确认! - gremo
在我的安全区域中添加“anonymous: ~”是我需要的,这样才能使它正常工作 - 谢谢! - Jessica

4
在account_area中使用anonymous指令:
account_area:
        pattern:    ^/
        anonymous: ~

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接