我有一个 Laravel 应用程序,可供多个用户同时使用,他们都可以编辑我们系统中的一些项目。
我不想要的是有 2 个人同时编辑同一个表单。
如果发生这种情况,我想告诉其他用户当前表单已锁定并且正在由用户名进行编辑。
如果用户随后离开或提交表单,则该表单将打开以供其他用户使用。
我已经检查了乐观锁定和悲观锁定,我认为这对我来说不正确
我正在考虑做的是在正在编辑的表中创建一个唯一标识符,如果页面上的用户具有该标识符,我将锁定所有其他标识符,但是我如何知道用户是否关闭了该标识符浏览器窗口?那么所有其他用户仍然无法访问该页面/表单?
你们建议我如何去做这件事?
将可为空的locked_to列添加到数据库中projects。然后在Project模型中将此字段添加到$dates数组中,以便它可以自动转换为Carbon实例。
当有人打开项目进行编辑时,只需将locked_to字段设置为未来日期,我认为 +5 秒可能是一个不错的选择。编辑表单应每 5 秒发送一次 ajax 请求,以在接下来的 5 秒内保持项目锁定。
当用户保存项目更改时,锁定将停止,因为不会发送 ajax 请求。在这种情况下,您还有一个字段可以告诉您上次打开项目的时间。
locked_to如果字段等于或大于实例,用户将无法编辑项目new Carbon。
更新 - 更多信息
无需清除该字段。如果用户没有完成编辑 - 他只是重新加载页面,导航到其他页面,关闭窗口或浏览器,死亡等...用于锁定的ajax将不再执行,因此在接下来的5秒内当前编辑的项目将被解锁-locked_to字段将包含早于当前的日期。
| 归档时间: |
|
| 查看次数: |
4393 次 |
| 最近记录: |