【问题标题】:All urls behind firewall in Symfony2Symfony2中防火墙后面的所有url
【发布时间】:2014-09-19 18:02:00
【问题描述】:

我正在创建一个仅供用户使用的应用程序。所以你必须登录才能访问任何网址。

目前我有这个:

firewalls:
    main:
        pattern: ^/
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider

        logout:       true
        anonymous:    true

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

    default:
        anonymous: ~

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

但是当我登录时,我遇到了安全检查。将我的所有网址放在防火墙后面的最佳方法是什么?

【问题讨论】:

  • 您在防火墙中为login_pathcheck_path 设置了什么?
  • /admin/ 的条目应放在 / 的条目之前,因为访问控制规则列表会被评估,直到找到第一个匹配项。
  • 添加了我的防火墙路由

标签: security symfony firewall


【解决方案1】:

symfony 中的 acl 系统作为上层覆盖下层 ACL 工作。

“检查 ACE 的顺序很重要。作为一般规则,您应该在开头放置更具体的条目。” Symfony 2 acl Doc

所以:

access_control:
    - { path: ^/admin/, role: ROLE_ADMIN }                       # 4 You override #1 for all urls beginning by admin/ by allowing it to ROLE_ADMIN
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }     # 2 Same as 2
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }   # 2 Same as 2
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }  # 2 You have blocked all except this pas for IS_AUTHENTICATED_ANONYMOUSLY
    - { path: ^/, role: IS_AUTHENTICATED }                       # 1 You start by blocking all

或带有您的参数的完整 fos 用户文件:

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
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                remember_me: true
            logout:       true
            anonymous:    true

    access_control: #Top override bottom, change order with CAUTION

        ## Admin Rule
        - { path: ^/admin, role: ROLE_ADMIN }

        ## Anonymous FOS User Rules
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }

        ## Block All Website to anonymous user
        - { path: ^/, roles: ROLE_USER }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2017-05-07
    • 2015-11-26
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    相关资源
    最近更新 更多