我有一个Web应用程序,由具有项目的用户组成,项目属于单个用户,并且可以通过URI :root/project/[pid
进行访问。
现在我有一个中间件来限制用户访问彼此的项目。虽然我的Web应用程序中还有一个功能,用户可以通过该功能与其他用户共享项目,因此多个用户可以访问单个共享项目。
问题是我不希望他们同时访问同一个项目,比如说project1由user1和user2共享。 URI root / project / project1_id可以由两者访问,但不能同时访问。
我目前正在考虑如何做到这一点,我有一些想法,但想知道是否有最好或更简单的方法来做到这一点。
我正在考虑改变数据库中的项目表,使其具有一个活动标志,每当用户访问项目网页时都会设置为true,并在他/她离开网页或会话结束时取消设置。
但我不确定这是不是最好的方法。
我使用laravel作为我的Web应用程序的框架。因此,该框架内的解决方案将非常棒
答案 0 :(得分:1)
Store a version number with each project
当有人开始编辑项目中的内容时,请将当前版本号发送到浏览器。保存编辑时,将版本号发送回服务器。如果版本号匹配,则保存更改并增加版本。如果版本号不匹配,则其他人在此期间编辑了该项目。当用户正在编辑时,定期调用服务器以检查版本号是否已更改并显示“另一个用户已更改此项目”(如果有)。每当有人开始编辑某些内容时,您也可以将某些内容保存到数据库中,因此如果第二个人在特定时间间隔内开始编辑项目,则可以显示“X正在编辑此项目。”
我会使用这种策略,而不是使用锁定来防止第二个人甚至开始新的编辑,因为在网络上很难确定启动的操作是否会完成。如果用户开始编辑但随后分心并让浏览器保持打开状态,则该项目的其他编辑将被阻止,直到您的锁定超时。
答案 1 :(得分:0)
我最终使用下面提到的问题解决方案:
我在项目表中添加了updated_at时间戳和update_by列,以便更新时间有人更新项目
在前端,我设置了一个长轮询功能,每隔几秒检查一次项目表
如果项目在过去5秒左右由我以外的其他人进行了更新,我在前端获取了整个更新的项目。