Блокируйте ресурс только для одного пользователя в PHP AJAX и перенаправляйте другого в форму только для чтения - PullRequest
0 голосов
/ 04 ноября 2018

Я создаю приложение с laravel 5.5. Я использую так PHP AJAX и MySQL.

У меня проблема. Пользователь соединяется со своей учетной записью в приложении, и когда он нажимает на элемент (например, карточку контакта), я хочу перенаправить этого пользователя в форму только для чтения, потому что другой пользователь находится в текущей карточке. Этот другой пользователь видит форму для редактирования карты.

На самом деле, я хочу заблокировать ресурс только для одного редактируемого пользователя. Другие пользователи будут доступны только для чтения (перенаправить на другой маршрут)

Возможно ли использовать промежуточное ПО? Использовать куки? Или запустить маршрут Ajax, когда пользователь закрыл свой браузер или вкладку?

Помоги мне ....

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Я считаю, что вы должны использовать оба подхода;

  1. Обрабатывать его через промежуточное ПО Laravel на стороне сервера - вам потребуется создать промежуточное ПО, которое должно проверять вызов ресурсов. Вам также необходимо сохранить флаг обновления для ресурса для определенного запроса сеанса, чтобы он не был доступен для других.
  2. Проверка на стороне клиента на доступность ресурса - Как только ресурс отправляется другим пользователем, текущий пользователь, который видит ресурс как Готов только , может работать с ним с последней версией. данные в форме.

Кроме того, вы можете управлять очередью запросов для обработки такого приоритета, чтобы, если несколько пользователей просматривали ресурс, они могли получать их в соответствии с их приоритетом в зависимости от установленного вами приоритета.

0 голосов
/ 04 ноября 2018

Добавьте новое обнуляемое поле в базу данных на вашем ресурсе, чтобы сохранить текущий идентификатор пользователя, который отвечает за редактирование. Затем добавьте промежуточное программное обеспечение, которое проверит, является ли это поле пустым, а затем свободно редактирует, если не будет доступно только для чтения.

например, у вас есть таблица продуктов:

id title group_id editor_id


1 велосипед 1 5
2 машины 3 ноль

Идентификатор ресурса 1 может редактироваться только идентификатором пользователя 5.
Код ресурса 2 доступен для редактирования любому пользователю, который начинает редактирование.

и затем после выхода пользователя или любого другого поведения, которое вам нравится, попробуйте снова сделать его нулевым, чтобы его могли редактировать другие.

код промежуточного программного обеспечения:

// 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.');
}
...