Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Symfony2中为带有querystring的URL设置访问控制_Symfony_Query String_Access Control_Symfony 2.6 - Fatal编程技术网

在Symfony2中为带有querystring的URL设置访问控制

在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
/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}/。听起来不错?