[Authorize]
Атрибут - это приятное и удобное изобретение MS, и я надеюсь, что он сможет решить проблемы, которые у меня есть сейчас.
Более конкретно:
Когда текущий клиент не аутентифицирован - [Authorize]
перенаправляет с защищенного действия на страницу входа и после успешного входа в систему - возвращает пользователя, это хорошо.
Но когда текущий клиент уже аутентифицирован, но не авторизован для запуска определенного действия - все, что мне нужно, это просто показать мою общую страницу 403.
Возможно ли это, не двигая логику авторизации в тело контроллера?
Обновление: Поведение, в котором я нуждаюсь, должно быть семантически равно этому эскизу:
public ActionResult DoWork()
{
if (!NotAuthorized())
{
// this should be not redirect, but forwarding
return RedirectToAction("403");
}
return View();
}
so - не должно быть никаких перенаправлений и URL-адресов, которые должны оставаться неизменными, но содержимое страницы должно быть заменено на 403 страницы
Обновление 2. Я реализовал эскиз следующим образом:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
[CustomActionFilter]
public ActionResult About()
{
return View();
}
public ActionResult Error_403()
{
return Content("403");
}
}
public class CustomActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Result = new ContentResult { Content = "403" };
}
}
И не получается, как правильно перенаправить выполнение на HomeController.Action_403(), чтобы он отображал 403.
Обновление 3:
filterContext.Result = new ViewResult() { ViewName = "Error_403" };
так что это ответ на то, как визуализировать определенный шаблон представления... но до сих пор не знаю, как запустить другой контроллер - во всяком случае, это достаточно хорошее решение.