Запретить двум пользователям редактировать одни и те же данные
Я видел функцию в различных веб-приложениях, включая Wordpress (не уверен?), Которая предупреждает пользователя, если он / она открывает статью / запись / страницу / что-либо из базы данных, в то время как кто-то другой одновременно редактирует те же данные.
Я хотел бы реализовать эту функцию в моем собственном приложении, и я немного подумал над этим. Является ли следующий пример хорошей практикой, как это сделать?
Это выглядит примерно так:
1)User A
заходит на страницу редактирования загадочной статьи X. Таблица базы данныхEvents
запрашивается, чтобы убедиться, что никто другой в данный момент не редактирует ту же страницу, которой к тому времени никто не является. Затем токен генерируется случайным образом и вставляется в таблицу базы данных, которая называетсяEvents
.
1)User B
также хочу, чтобы сделать обновления для статьи X. Теперь, так как нашUser A
уже редактирует статью,Events
таблица запрашивается и выглядит так:
| timestamp | owner | Origin | token |
------------------------------------------------------------
| 1273226321 | User A | article-x | uniqueid## |
2) Отметка времени проверяется. Если он действителен и менее, чем, скажем, 100 секунд, появляется сообщение, и пользователь не может внести какие-либо изменения в запрошенную статью X:
Warning: User A is currently working with this article. In the meantime, editing cannot be done. Please do something else with your life.
3) Если пользователь А решает продолжить и сохранить свои изменения, токен публикуется вместе со всеми другими данными для обновления базы данных и переключает запрос на удаление строки с токеном.uniqueid##
, Если он решит сделать что-то еще вместо того, чтобы вносить свои изменения, статья X все равно будет доступна для редактирования через 100 секунд дляUser B
Дайте мне знать, что вы думаете об этом подходе!
Желаю всем хороших выходных!