2016-10-11 2 views
0

У нас есть веб-приложение с панелью администрирования с несколькими пользователями, созданная с использованием ASP.NET MVC. Поскольку несколько пользователей одновременно получают доступ к одной странице, в базу данных будут обновляться только последние измененные и сохраненные данные пользователя. Это создает проблемы для других пользователей.Запретить одновременный доступ к странице в ASP.NET MVC

  1. Есть ли возможность запретить одновременный доступ пользователей к одной странице в любое время? Если пользователь уже работает на странице, система должна предупредить другого пользователя, который пытается получить доступ к той же странице, что «Кто-то еще работает на этой странице. Попробуйте через некоторое время».
  2. Есть ли какие-либо средства для этой проблемы, предоставленные самой средой MVC или .NET-аутентификацией?
  3. В противном случае любое подходящее логическое решение также прекрасное.

Заранее спасибо ...

+0

Вы можете сделать это в Db уровень. Если кто-то уже редактирует страницу или форму, просто используйте столбец бит, чтобы предотвратить одновременное редактирование. В этом случае вы можете создать другую или в той же таблице. Просто обновите столбец 1 при обновлении и 0, когда закончите. –

+0

@ AT-2016, не работает, если первый пользователь отказался от редактирования - флаг никогда не перезагружается, и никто еще не редактирует его :) –

+0

если кто-то получил доступ к странице, и я обновил поле бит до 1, и он оставил на странице без нажатия кнопки «Отправить». страница станет непригодной для всех пользователей на неопределенный срок. правильно? –

ответ

0

создать таблицу, как sys_forms эта таблица имеет столбец, как контроллер и действие и вид и IsActive

и добавления фильтра действий, когда вам нужно проверить, если страница доступна или нет

[PageAvailableFilter] 
public class HomeController : Controller 
{ 
     public ActionResult Index() 
     { 
      return View(); 
     } 
} 

и создать класс PageAvailableFilter наследуемых от ActionFilterAttribute и переопределить OnActionExecuting метод, потому что этот метод вызывается перед действиями в контроллере

public class PageAvailableFilterFilter : ActionFilterAttribute 

{ 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      var controllerName = filterContext.routeData.Values["controller"]; 
      var actionName = filterContext.routeData.Values["action"]; 
      //here and you logic and query 
      if (some_conditions == true) 
      { 
      filterContext.Result = new RedirectResult("~/MyPage"); 
      return; 
      } 
     } 
    } 

и проверить, если этот контроллер и действие доступно или нет, и вы можете использовать viewbag и ViewData в этом классе

для получения более подробной информации подробнее о фильтре действия

+0

да у вас есть другой решение? –

+0

@ freedomn-m Да, мне жаль, что я скопировал это и не меняю имя класса –

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