Я написал собственный фильтр авторизации:
public class MyAuthenticationAttribute : FilterAttribute, IAuthorizationFilter{
// Do the authorization
if (!isAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
Этот фильтр имеет различные условия и, в конце концов, установит результат Unauthorized
, если пользователь не авторизован, и ничего не сделает, если пользователь авторизован.
Он используется в приложении SPA, и почти все мои методы вызываются из сетки. В этих сетках у меня есть собственный обработчик ошибок, который будет показывать дружественные уведомления, если что-то пойдет не так. Все ошибки добавляются в файл ModelState
.
Теперь я хотел бы управлять несанкционированным поведением и изменить ModelState
, когда пользователь не авторизован, например, для удаления.
Пожалуйста, помогите мне, как мне это реализовать и какие методы мне нужно переопределить.
ОБНОВЛЕНИЕ
Я могу изменить состояние модели с помощью этой строки:
filterContext.Controller.ViewData.ModelState.AddModelError("", "GO AWAY!");
Но это ничего не возвращает пользователю. Я пытался использовать IAuthenticationFilter
и добавить ошибку ModelState
в методе вызова, и это тоже не сработало.
Я думаю, все будет хорошо, если я смогу вернуть некоторые Json
данные.
Мне нужно как-то получить подобное поведение этого метода действия:
public ActionResult Delete([DataSourceRequest] DataSourceRequest request, object model)
{
ModelState.AddModelError("", "error");
return Json(new[] { model}.ToDataSourceResult(request, ModelState));
}
Является ли это возможным? Есть ли у вас какие-либо предложения по реализации этой авторизации и возврату Json
данных?