在Symfony2中为带有querystring的URL设置访问控制
我想允许角色为_ADMIN的用户访问以下路径:在Symfony2中为带有querystring的URL设置访问控制,symfony,query-string,access-control,symfony-2.6,Symfony,Query String,Access Control,Symfony 2.6,我想允许角色为_ADMIN的用户访问以下路径: /admin /admin?select=pending 并且仅允许具有角色\内容或角色\管理员的用户访问以下路径: /admin /admin?select=pending 这是我在security.yml中的访问控制配置: access_control: - { path: ^/admin?select=pending, role: [ ROLE_ADMIN, ROLE_CONTENT ] } - { path: ^/a
/admin
/admin?select=pending
并且仅允许具有角色\内容或角色\管理员的用户访问以下路径:
/admin
/admin?select=pending
这是我在security.yml中的访问控制配置:
access_control:
- { path: ^/admin?select=pending, role: [ ROLE_ADMIN, ROLE_CONTENT ] }
- { path: ^/admin, role: ROLE_ADMIN }
但是,如果我尝试与具有ROLE\u CONTENT
的用户一起访问查询字符串路径,则会显示403
拒绝访问错误消息
关于如何实现这一点有什么建议吗?首先,像/admin?select=pending这样的链接不是“symfony-y”。因此,我建议执行两个操作(一个用于/admin/,一个用于/admin/{select}/),并为这两个操作/路由定义角色。您还需要选择位于/admin/route下方的内容吗?看看您的角色,将其删除是合乎逻辑的,因此/admin/中的内容将保留在那里,而其他select something内容将转到类似/anotheradminroute/{select}/的位置。您可以告诉symfony{select}变量可以是什么(在您的情况下为“待定”)。查看有关路由的文档。我理解你的意思,一开始我就是这样尝试的。但是,querystring表示表单中的select
,因此当单击submit按钮时,它会发送get参数并更新结果列表。当选择选项被更改以发送到不同路径而不是/admin
时,我没有找到一种简单的方法来更改表单操作。我可以用JS轻松地完成它,但是这样做,我无法使用path
函数使其在本地、开发和生产环境中工作。嗯,这是可以理解的。我认为您应该在adminAction开始时检查$request方法(或者在/admin路径上的任何操作)。如果方法是POST,则可以通过从表单中读取$select变量重定向到/admin/{select}/。听起来不错?