Я делаю веб-приложение с MVC 5 .Net. Я хочу ограничить только одного пользователя, чтобы редактировать представление за раз. Например, пользователь A имеет доступ к ..../Edit/5. Когда пользователь B пытается получить доступ к какой-либо форме (.../Edit/5), в то время как пользователь A все еще редактирует, я хочу показать какое-то сообщение, например «Другой пользователь редактирует». Повторите попытку позже ». На моих видах редактирования я создал функцию автоматического сохранения, которая сохраняется каждые 30 секунд. Таким образом, пользовательский доступ к редактируемой форме невозможен, пока пользователь A все еще редактирует (пользователь B должен оставаться на одном сайте). Я думаю с чем-то вроде добавления нового столбца в базу данных, но я думаю, что если пользователь A просто закроет браузер, все еще находясь на странице редактирования. Поле в базе данных по-прежнему будет таким же, чтобы никто не мог редактировать это представление. Я надеюсь, что вы поймете мою проблему, я могу помочь мне.Как ограничить только одного пользователя Редактировать вид MVC 5 .Net за один раз
ответ
Я решить эту проблему, создав новую таблицу, где я сохранить идентификатор пользователя, идентификатор из элемента, редактирование и время, когда заблокирован. Если просмотр заблокирован менее 30 минут, если кто-то попытается получить доступ, я покажу сообщение, но если более 30 минут пользователь может редактировать. также я создал функцию JavaScript window.onbeforeunload, где я разблокирую вид. Также разрешите администратору разблокировать просмотр при нажатии кнопки
Вы можете добавить одно поле в таблицу, как «LOCK», и когда любой пользователь нажмет на редактирование, вы измените это поле на 1 и проверите на редактирование, если lock == 0 перейдите к просмотру типа else и нажмите кнопку «Сохранить» изменить значение блокировки до 0
Это не относится к последней части вопроса OP - она терпит неудачу, если пользователь A начинает редактирование, а затем закрывает браузер без сохранения. Блокировка остается включенной и теперь препятствует ее редактированию снова. –
Bro вы можете добавить поле блокировки в индексный вид, и если какие-либо статьи были открыты, показать, что изображение блокировки похоже на joomla и wordpress и ect , если пользователь нажимает на блокировку вашего кода, разблокировать эту статью Я думаю, что это лучший способ, потому что если вы сделаете это со временем у вас возникнут какие-либо проблемы. –
. Не понимаете проблему! Пользователь A редактирует его, флаг установлен на '1'. Если пользователь a оставит его без сохранения, флаг остается установленным - никто другой не может редактировать, потому что он не был возвращен обратно в '0' –
Вы должны использовать Timestamp
для управления параллелизмом:
[Timestamp]
public byte[] RowVersion { get; set; }
Подробнее here
- 1. Ограничить одно панорамирование панорамирования за один раз
- 2. Только один сеанс одного и того же приложения, за пользователя, за один раз, в Intraweb
- 3. Как сделать только один логин пользователя за один раз
- 4. Как сделать UIScrollview только показ одного подкатегория за один раз
- 5. ASP.NET MVC 5 Model-Binding Редактировать вид
- 6. Ограничить пользователя регистрацией только один раз в день java
- 7. Как заставить пользователя вводить только один символ за раз
- 8. Залить Редактировать Тексты за один раз
- 9. Ограничить загрузку пользователей 4 за один раз
- 10. Разрешить только один логин для каждого пользователя за один раз
- 11. Laravel: позволяет только один сеанс на пользователя за один раз
- 12. Спасти процессы, но только 5 за раз
- 13. Как ограничить запуск только одного экземпляра приложения за один раз в mfc
- 14. ASP.NET MVC 5 - перенаправление с точкой зрения только один раз
- 15. Ограничить действие только один раз на iPhone
- 16. Особый Расширяемый вид, видимый за один раз
- 17. как разрешать только один аргумент за раз
- 18. Glassfish разрешает только один сеанс от одного и того же пользователя за один раз
- 19. Извлечь только 5 пользователей за один раз: Firebase [like Instagram]
- 20. Angular Xeditable - Ограничить редактирование строк одной строкой за один раз
- 21. FireFox editableCellTemplate только позволяет редактировать один раз
- 22. dojo.dnd только один элемент за один раз
- 23. Открытие документа одного слова за один раз
- 24. Ограничить передачу файлов MQFTE в один файл за один раз
- 25. показ одного всплывающего окна за один раз
- 26. Отображать текст только один раз за сеанс в .net
- 27. только открыть один JInternalFrame за один раз
- 28. Только один эффект перехода за один раз
- 29. Только один поток за один раз C#
- 30. MVC 5, Ajax, JQuery - скрипт работает только один раз
Вы можете справиться с этим через оптимистичный параллелизм. Пусть пользователь B откроет его, но если пользователь A будет сохранен в это время, вы можете отобразить сообщение, когда пользователь B попытается сохранить его, сообщив им, что его редактировали с момента его открытия. –
Одним из способов является поддержание широкого статического списка приложений идентификаторов элементов, которые в настоящее время редактируются, и проверить, принадлежит ли Идентификатор этому списку, а затем предоставить пользователю указанное вами сообщение. Когда пользователь сохраняет элемент или активируется автосохранение, удалите элемент из списка. – shwetaOnStack