0

我正在使用 Symfony 2.2,并且我遇到了允许多个用户编辑资源的情况。我的资源有 ID,路径如下所示,资源在数据库中的 id 是/resource/edit/{id}哪里。{id}

我的表单在对该路径发出 GET 请求时显示,并在发出 POST 请求时进行处理。现在,由于所有用户都是平等的,并且没有资源归一个用户所有,因此可能会出现这样一种情况:用户正在为 编辑表单resource #2,但随后将表单的操作参数更改为/resource/edit/5。然后 POST 请求将更改 的值resource #5而不是resource #2。目前这只是冒险,最终他们自己搞砸了,但我仍然想限制这一点。

我想到的一种策略是设置一个基于资源 ID 的具有特定值的闪存会话变量,然后将该值也与表单一起发送。在下一个请求中,我将检查 flash 会话变量中的值是否与来自表单的值匹配,并检查从变量派生的 ID 是否与使用 POST 尝试编辑的资源 ID 匹配。flash 数据的问题在于,我认为当用户在另一个浏览器选项卡中发出请求时,它可能会消失。也许用表单加密/散列预期的动作(用盐)会起作用吗?

是否有任何经过时间考验的模式/策略,甚至可能是 Symfony2 服务来检查表单是否在编辑请求中保留了其预期的操作/资源/ID。

4

0 回答 0