2015-11-16 3 views
1

Я делаю веб-приложение с MVC 5 .Net. Я хочу ограничить только одного пользователя, чтобы редактировать представление за раз. Например, пользователь A имеет доступ к ..../Edit/5. Когда пользователь B пытается получить доступ к какой-либо форме (.../Edit/5), в то время как пользователь A все еще редактирует, я хочу показать какое-то сообщение, например «Другой пользователь редактирует». Повторите попытку позже ». На моих видах редактирования я создал функцию автоматического сохранения, которая сохраняется каждые 30 секунд. Таким образом, пользовательский доступ к редактируемой форме невозможен, пока пользователь A все еще редактирует (пользователь B должен оставаться на одном сайте). Я думаю с чем-то вроде добавления нового столбца в базу данных, но я думаю, что если пользователь A просто закроет браузер, все еще находясь на странице редактирования. Поле в базе данных по-прежнему будет таким же, чтобы никто не мог редактировать это представление. Я надеюсь, что вы поймете мою проблему, я могу помочь мне.Как ограничить только одного пользователя Редактировать вид MVC 5 .Net за один раз

+0

Вы можете справиться с этим через оптимистичный параллелизм. Пусть пользователь B откроет его, но если пользователь A будет сохранен в это время, вы можете отобразить сообщение, когда пользователь B попытается сохранить его, сообщив им, что его редактировали с момента его открытия. –

+0

Одним из способов является поддержание широкого статического списка приложений идентификаторов элементов, которые в настоящее время редактируются, и проверить, принадлежит ли Идентификатор этому списку, а затем предоставить пользователю указанное вами сообщение. Когда пользователь сохраняет элемент или активируется автосохранение, удалите элемент из списка. – shwetaOnStack

ответ

0

Я решить эту проблему, создав новую таблицу, где я сохранить идентификатор пользователя, идентификатор из элемента, редактирование и время, когда заблокирован. Если просмотр заблокирован менее 30 минут, если кто-то попытается получить доступ, я покажу сообщение, но если более 30 минут пользователь может редактировать. также я создал функцию JavaScript window.onbeforeunload, где я разблокирую вид. Также разрешите администратору разблокировать просмотр при нажатии кнопки

0

Вы можете добавить одно поле в таблицу, как «LOCK», и когда любой пользователь нажмет на редактирование, вы измените это поле на 1 и проверите на редактирование, если lock == 0 перейдите к просмотру типа else и нажмите кнопку «Сохранить» изменить значение блокировки до 0

+0

Это не относится к последней части вопроса OP - она ​​терпит неудачу, если пользователь A начинает редактирование, а затем закрывает браузер без сохранения. Блокировка остается включенной и теперь препятствует ее редактированию снова. –

+0

Bro вы можете добавить поле блокировки в индексный вид, и если какие-либо статьи были открыты, показать, что изображение блокировки похоже на joomla и wordpress и ect , если пользователь нажимает на блокировку вашего кода, разблокировать эту статью Я думаю, что это лучший способ, потому что если вы сделаете это со временем у вас возникнут какие-либо проблемы. –

+1

. Не понимаете проблему! Пользователь A редактирует его, флаг установлен на '1'. Если пользователь a оставит его без сохранения, флаг остается установленным - никто другой не может редактировать, потому что он не был возвращен обратно в '0' –

0

Вы должны использовать Timestamp для управления параллелизмом:

[Timestamp] 
    public byte[] RowVersion { get; set; } 

Подробнее here

Смежные вопросы