Проблема с авторизацией и Jquery - PullRequest
0 голосов
/ 26 марта 2010

У меня небольшая проблема с диалоговым окном Jquery для действия, требующего роли. В моем примере пользователь может нажать на кнопку удаления и должен подтвердить действие. В моем контроллере для действия «Удалить» требуется роль. Если пользователь находится в требуемой роли, объект удаляется.

Проблема: как предупредить пользователя, если * элемент был удален (перенаправить в представление индекса) * произошла ошибка (оповещение с сообщением) * он не имеет прав на удаление (оповещение сообщением)

Перед использованием фильтра авторизации действие удаления вернуло JSON с логическим значением, указывающим на наличие ошибки, URL-адрес для перенаправления в случае успеха и сообщение для предупреждения об ошибке.

Поскольку я не могу вернуть JSON из своего фильтра, я создал другой метод с фильтром авторизации, который возвращает частичное представление с подтвержденным содержимым. Если у пользователя нет прав, фильтр возвращает частичное представление с несанкционированным содержимым исключения.

Проблема: как определить, какое частичное представление было возвращено. Когда я создаю диалог, мне нужно знать функцию кнопок.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 марта 2010

Нашли решение, добавив код в Global.asax:

protected void Application_EndRequest()
    {
        if (Context.Response.StatusCode == 302 &&
            Context.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
        {
            Context.Response.Clear();
            Context.Response.StatusCode = 401;
        }
    }
0 голосов
/ 26 марта 2010

Я бы предложил добавить что-то в вашу модель, где диалог jquery создается как флаг CanDeleteItem. Затем создайте свой диалог, используя эту информацию, вместо того, чтобы предполагать, что у них есть права на удаление. Показывать кнопку, которую пользователь не может использовать, - плохая идея.

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

$.ajax({
  url: "/delete/5",
  type: "POST",
  success: function(json){
   // the delete happened
  },
  error: function(request, status, error){
  // it failed, authorization(403) or just an error (500)
  }
});
...