yii 有效地验证页面上的数据自您加载后未被其他人更改?

xdnvmnnf  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(96)

我们有一个页面,其中包含大量用户可编辑的数据,这些数据是从数据库中的各种表填充的。这些数据位于所有不同的表单、下拉列表、复选框、输入框、文本区域等中。
在两个用户几乎同时加载记录的情况下,存在一些冲突,其中一个用户进行了更改,然后另一个用户进行了一组更改。当他们保存时,他们不知道其他人进行了更改,并且可能刚刚破坏了他们所做的更改或覆盖了他们所做的更改。
我正在尝试实现一个解决方案来缓解这个问题,例如当数据被其他人更改时向用户闪烁一个错误。
我想知道是否有一个最好的做法来检查这个问题?我有一些想法是

  • 同时提交字段中的“当前”数据和“原始”数据。然后检查哪些数据发生了更改,并在数据库中进行比较,以查看默认值是否与当前保存的数据不同。这可能会起作用,但似乎对性能最不友好。
  • 使用jquery/javascript来检测一个字段何时被编辑过,如果它已经从defaultValue改变了,那么设置一个隐藏字段,该字段将被提交以指示它的原始值。
  • 设置一个隐藏字段,其中包含用户加载页面的时间戳。当用户提交时,使用该时间戳并检查历史表,查看自该时间戳以来页面上是否有任何数据发生了更改。这似乎是最有效的想法,也可能是最容易实现的。

有没有更好的选择或最佳实践方法来做到这一点?我觉得我是在为一个常见的问题重新发明轮子。

ikfrs5lh

ikfrs5lh1#

你正在解决一个常见的问题。但它是常见的,因为它需要反复解决这么频繁。“乐观记录锁定”是你前进的道路。看起来yii(我不熟悉)有能力合并处理这个问题。我发现this link
无论是yii基础设施为你做这件事,还是你必须自己构建它,你想要做的(支持乐观记录锁定)如下:
1.在将数据检索到客户端时,制作并保留一份未更改的数据副本。
1.客户端必须将更改与未更改的数据副本一起提交回服务器。
1.服务器的“更新”例程将未更改的副本与当前记录进行比较。如果某些内容已更改,则必须返回错误消息和“新”当前记录。
1.如果未进行任何更改,则服务器执行更新。
另一种方法是悲观记录锁定,您可以 checkout 它。我避免它是因为它有其他问题,但有一些情况下它更合适。

相关问题