我用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.');
}
我认为您应该同时使用这两种方法;
- 通过服务器端的Laravel中间件处理它-您需要创建一个中间件来检查资源调用。您还需要针对特定会话请求的资源维护更新标志,这样其他人就不会使用它
- 客户端检查资源的可用性-一旦资源由其他用户调度,当前用户将资源视为仅就绪,则可以使用表单上的最新数据进行处理
此外,您可以管理请求队列以处理这样的优先级,这样,如果多个用户正在查看资源,他们应该能够根据您设置的优先级获得优先级。