ASP.NET в MVC 4 пользовательский атрибут authorize - как перенаправить неавторизованных пользователей на страницу ошибки? [дубликат]
На этот вопрос уже есть ответ здесь:
Я использую пользовательский атрибут authorize для авторизации доступа пользователей на основе их уровней разрешений. Мне нужно перенаправлять неавторизованных пользователей (напр. пользователь пытается удалить счет-фактуру без удаления уровня acess) доступ запрещен страница.
Пользовательский атрибут работает. Но в случае несанкционированного доступа пользователя, ничего не отображается в браузере.
Код Контоллера.
public class InvoiceController : Controller
{
[AuthorizeUser(AccessLevel = "Create")]
public ActionResult CreateNewInvoice()
{
//...
return View();
}
[AuthorizeUser(AccessLevel = "Delete")]
public ActionResult DeleteInvoice(...)
{
//...
return View();
}
// more codes/ methods etc.
}
Пользовательский код класса атрибутов.
public class AuthorizeUserAttribute : AuthorizeAttribute
{
// Custom property
public string AccessLevel { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var isAuthorized = base.AuthorizeCore(httpContext);
if (!isAuthorized)
{
return false;
}
string privilegeLevels = string.Join("", GetUserRights(httpContext.User.Identity.Name.ToString())); // Call another method to get rights of the user from DB
if (privilegeLevels.Contains(this.AccessLevel))
{
return true;
}
else
{
return false;
}
}
}
Ценю, если вы можете поделиться своим опытом по этому вопросу.
1 ответ:
Вы должны переопределить
HandleUnauthorizedRequest
, Как указано здесь.public class CustomAuthorize: AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if(!filterContext.HttpContext.User.Identity.IsAuthenticated) { base.HandleUnauthorizedRequest(filterContext); } else { filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new{ controller = "Error", action = "AccessDenied" })); } } }
**Примечание: обновлено условное выражение Jan ' 16