【问题标题】:Symfony security / access_control, lots of redundant entriesSymfony 安全/访问控制,大量冗余条目
【发布时间】:2016-09-22 16:55:47
【问题描述】:

security.ymlaccess_control 条目,每个条目都是以下各项的组合:

  • 网址格式
  • 主机名模式
  • 渠道要求(http、https)
  • 角色要求

我的理解是 Symfony 每个请求只匹配一个,但这也是执行 HTTPS 的最高级别。

那么,这是否意味着每个唯一 URL 模式/角色要求的规则重复?

  • # 规则..
  • /admin 的规则要求本地主机的 ROLE_ADMIN
  • /admin 的规则需要 ROLE_ADMIN,强制 https
  • /api 的规则要求本地主机的 ROLE_API
  • /api 的规则需要 ROLE_API,强制 https
  • 规则/允许本地主机匿名
  • 规则/允许匿名,强制 https
  • # 更多规则..

【问题讨论】:

    标签: php symfony security


    【解决方案1】:

    你是对的,对于每个传入的请求,Symfony 将根据URI、客户端的IP 地址、传入的来决定使用哪个access_control >“HOST NAME”!,以及请求方法

    但为了你的幸福,有一种方法可以不重复规则并实现相同的目标。


    “特别parameters.yml文件”

    它定义了通常在每个服务器上更改的值。

    首先,在你的本地开发机器中,在app/config/parameters.yml文件中定义一个新参数,我们命名为“requires_channel”

    # in your local development machine (development)
    parameters:
        database_driver: pdo_mysql
        # ...
        requires_channel: http  # <- Wow! I can use this var anywhere into my configuration :)
    

    在生产服务器上做同样的事情,但设置https:

    # in your deployment server (production)
    # app/config/parameters.yml
    parameters:
        database_driver: pdo_mysql
        # ...
        requires_channel: https # <- I need enforce https redirection now in production server
    

    现在,您可以为每个条目仅定义一个规则并使用新的 %requires_channel% 参数:

    # app/config/security.yml
    security:
        # ...
    
        access_control:
            - { path: ^/admin, role: ROLE_ADMIN, requires_channel: '%requires_channel%' }
            # ...
    

    %requires_channel%其值取决于运行应用程序的主机

    请注意,host 属性不再重要,因为之前需要区分这两个规则。


    此解决方案可以通过使用环境配置文件(config_dev.ymlconfig_prod.yml)来完成,但您可能还需要在 localhost (http) 中测试您的应用程序的 prod 环境。所以上面的解决方案对你来说应该足够了;)


    希望能帮到你!

    【讨论】:

    • 哇!它一直在配置。
    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2011-02-21
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2019-01-29
    相关资源
    最近更新 更多