Symfony2随机获取Forbidden错误

时间:2014-07-28 13:23:36

标签: php symfony fosuserbundle permission-denied

我有一个扩展FOSUserBundle的AcmeUserBundle,我可以正常登录。我有另一个AcmeTestBundle,我在其中显示一些信息。 登录后,我有一个包含以下链接的页面:

 http://localhost/smf/web/app_dev.php/test/view/1
 http://localhost/smf/web/app_dev.php/test/view/2
 http://localhost/smf/web/app_dev.php/test/view/3
 ...

它们都显示相同的页面,只显示特定ID的不同信息。首先登录后一切正常,但在同一个链接上点击几下后我就得到了:

Forbidden
You don't have permission to access /smf/web/app_dev.php/test/view/2 on this server.

当我清除缓存并等待大约一分钟后,一切都恢复正常。 这看起来很奇怪。

我的路线如下:

acme_test_view:
    path:     /test/view/{id}
    defaults: { _controller: AcmeTestBundle:Default:view, id: null }
    requirements:
      id: \d+
    methods: [GET]

“id”默认为null,因为如果没有提供ID,我必须显示数据库中的第一个条目以及所有其他条目的链接。

在security.yml中我设置了:

access_control:
    - { path: ^/test/, role: ROLE_USER}

我不确定我的问题是在用户设置,路由还是完全不同的东西。 我有什么想法我做错了吗?

编辑: 我的操作的简化版本如下所示:

public function viewAction( $id = null) 
{
   $item = $this->getDoctrine()
            ->getRepository("AcmeTestBundle:Item")
            ->find($id);
   return $this->render("AcmeTestBundle:Default:view.html.twig", array("item" => $item));
}

获取数据并将其传递给模板。没什么特别的。

1 个答案:

答案 0 :(得分:0)

也许问题是,你没有登录。 您已为角色为ROLE_USER的用户创建了安全区域。如果您尚未登录,则会导致403错误。

除此之外,您还应声明另一个可通过匿名访问的区域。也许您的登录操作也在防火墙后面,因此您无法访问登录表单。

请查看http://symfony.com/doc/current/book/security.html并阅读"避免常见陷阱"

问候!