【问题标题】:Symfony 2 - firewall and access control issueSymfony 2 - 防火墙和访问控制问题
【发布时间】:2012-03-10 19:35:02
【问题描述】:

我遇到了 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 }

提前致谢!

【问题讨论】:

    标签: php security symfony


    【解决方案1】:

    值得一提的是,这里的最佳做法是只使用一个带有 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 }
    

    【讨论】:

    • 太棒了!这就是我的想法,我得到了确认!
    • 在我的安全区域添加“匿名:〜”是我需要让它工作 - 谢谢!!
    【解决方案2】:

    在 account_area 中使用 anynymous 指令:

    account_area:
            pattern:    ^/
            anonymous: ~
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-30
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      相关资源
      最近更新 更多