在laravel PHP AJAX中只为一个用户阻塞资源,并将另一个重定向到只读表单



我用laravel 5.5创建了一个应用程序。我经常使用PHP AJAX和MySQL。

我有个问题。一个用户连接到他在应用程序上的帐户,当他点击一个元素(例如联系人卡(时,我想在只读表单上重定向这个用户,因为另一个用户在当前卡中。这是另一个用户看到表单来编辑卡片。

事实上,我只想在编辑中为一个用户屏蔽一个资源。其他用户将处于只读(重定向到另一条路线(

是否可以使用中间件?使用cookie?或者在用户关闭浏览器或选项卡页面时启动Ajax路由?

帮帮我…

在资源的数据库中添加新的可为null的字段,以保持负责编辑的当前用户id。然后添加一个中间件,它将检查该字段是否为空,如果不是只读的,则可以自由编辑。

例如,您有一个产品表:

id title group_id editor_id


1辆自行车15
2车3空

资源id 1只能由用户id 5编辑。
任何开始编辑的用户都可以编辑资源id 2。

然后在用户退出或您喜欢的任何其他行为之后,尝试再次将其设为null以供其他人编辑。

中间件代码:

// find the resource
$resource = Resource::find($request->resource_id);
// current user is last user. so no need to check.
if($resource->editor_id == auth()->user()->id) return $next($request);
// check if 10 minutes passed from last edit by another user.
if(Carbon::now()->diffInMinutes(Carbon::parse($resource->updated_at)) >= 10) {
// replace current user id with last one.
$resource->editor_id = auth()->user()->id;
$resource->save();
} else {
return response('You dont have permission to edit.');
}

我认为您应该同时使用这两种方法;

  1. 通过服务器端的Laravel中间件处理它-您需要创建一个中间件来检查资源调用。您还需要针对特定会话请求的资源维护更新标志,这样其他人就不会使用它
  2. 客户端检查资源的可用性-一旦资源由其他用户调度,当前用户将资源视为仅就绪,则可以使用表单上的最新数据进行处理

此外,您可以管理请求队列以处理这样的优先级,这样,如果多个用户正在查看资源,他们应该能够根据您设置的优先级获得优先级。

最新更新