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

Block a resource for only one user in laravel PHP AJAX and redirect the other to a readonly form

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

我有问题。用户在应用程序上连接他的帐户,当他单击某个元素(例如名片)时,我想以只读方式在表单上重定向该用户,因为另一个用户在当前卡中。这是另一位用户查看表单以编辑卡片。

事实上,我只想为一个正在编辑的用户阻止资源。其他用户将处于只读状态(重定向到另一条路线)

是否可以使用中间件?使用饼干?还是在用户关闭浏览器或标签页时启动 Ajax 路由?

帮帮我....

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

例如你有一个产品 table:

id title group_id editor_id


1 自行车 1 5
2车3空

资源 id 1 只能被用户 id 5 编辑table。
资源 id 2 是 editable 任何开始编辑的用户。

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

中间件代码:

// 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. 客户端检查资源的可用性 - 一旦资源被其他用户调度,当前用户将资源视为只读 , 可以使用表格上的最新数据对其进行处理。

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