我正在使用Symfony 2.2,我有一种情况,即允许多个用户编辑资源。我的资源有ID,路径如下/resource/edit/{id}
,其中{id}
是资源在数据库中的ID。
当对该路径发出GET请求并在发出POST请求时进行处理时,将显示我的表单。现在,由于所有用户都是相同的,并且没有资源由一个用户拥有,因此可能存在用户正在编辑resource #2
的表单,但随后将表单的操作参数更改为/resource/edit/5
的情况。然后POST请求将更改resource #5
而不是resource #2
的值。目前这只是一种风险,最终他们正在为自己弄乱,但我仍然想限制这一点。
我想到的一个策略是设置一个具有特定值的flash会话变量,该值基于资源ID,然后也使用表单发送该值。在下一个请求中,我将检查flash会话变量中的值是否与来自表单的值匹配,并检查从变量派生的ID是否与使用POST的资源ID正在尝试编辑。闪存数据的问题在于,当用户在其他浏览器选项卡中发出请求时,我认为它可能会消失。也许使用表单加密/散列预期的操作(带有盐)会起作用吗?
是否有任何经过时间考验的模式/策略,甚至是Symfony2服务,可用于检查表单是否在编辑请求中保留其预期的操作/资源/ ID。