symfony 安全限制访问路由列表到指定的一组 ips

symfony security restrict access to a list of route to specified set of ips

我有一个 Symfony 应用程序,需要将对路径列表的访问限制为一组指定的 ip。

对于仍在开发中但将分阶段上线的网站来说,这是必需的。完成的路径应该是任何人都可以访问的。

其他路径应该只能从一组指定的 IP 地址访问。 否则应该显示一个简单的 403。

路径不共享相同的前缀。 我也不想临时更改实际路径。

执行此操作的最佳方法是什么? 在 access_control 中添加大量项目感觉不是个好主意。

我可以添加防火墙侦听器或可以同时检查 ip 和请求路径的东西吗?我可以从那里抛出一个简单的 AccessDenied 异常吗?

你想要的是在security.yml下的access_control

下配置它
# app/config/security.yml
security:
    # ...
    providers:
        in_memory:
            memory:
                users:
                    ryan:
                        password: ryanpass
                        roles: 'ROLE_USER'
                    admin:
                        password: kitten
                        roles: 'ROLE_ADMIN'     

    access_control:
        - { path: ^/admin, roles: ROLE_USER, ip: 127.0.0.1 }
        - { path: ^/admin, roles: ROLE_USER, host: symfony\.com$ }
        - { path: ^/admin, roles: ROLE_ADMIN, methods: [POST, PUT] }
        - { path: ^/admin, roles: ROLE_USER }

你也可以使用 ips: [1.2.3.4, 5.6.7.8]

而不是 ip

角色来自您的提供商,在上面的示例中,它直接添加到配置中。

所有相关信息都在这里:http://symfony.com/doc/current/cookbook/security/access_control.html

最好也阅读整个安全部分: http://symfony.com/doc/current/book/security.html http://symfony.com/doc/current/book/security.html#roles