我有一个Symfony应用程序,需要限制对指定的一组ips的路径列表的访问。
这仍然是一个仍在开发中的网站,但将分阶段投入使用。任何人都可以访问所完成的路径。
其他路径只能从指定的一组IP地址访问。 否则应该显示一个简单的403。
路径不共享相同的前缀。 我也不想暂时改变实际路径。
这样做的最佳方法是什么? 在access_control中添加大量项目并不是一个好主意。
我可以添加防火墙侦听器或可以检查ip和请求路径的内容吗?我可以从那里抛出一个简单的AccessDenied异常吗?
答案 0 :(得分:0)
您想要的是在access_control
下的security.yml中配置它# 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 }
而不是ip,您也可以使用ips: [1.2.3.4, 5.6.7.8]
角色来自您的提供商,例如上面的内容会直接添加到配置中。
所有相关信息都在这里: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