Вот код моей модифицированной реализации AuthorizeAttribute
; Я назвал его SecurityAttribute
. Единственное, что я изменил это OnAuthorization
метода, и я добавил дополнительное строковое свойство для URL-адрес для перенаправления на несанкционированную страницу:
// Set default Unauthorized Page Url here
private string _notifyUrl = "/Error/Unauthorized";
public string NotifyUrl {
get { return _notifyUrl; } set { _notifyUrl = value; }
}
public override void OnAuthorization(AuthorizationContext filterContext) {
if (filterContext == null) {
throw new ArgumentNullException("filterContext");
}
if (AuthorizeCore(filterContext.HttpContext)) {
HttpCachePolicyBase cachePolicy =
filterContext.HttpContext.Response.Cache;
cachePolicy.SetProxyMaxAge(new TimeSpan(0));
cachePolicy.AddValidationCallback(CacheValidateHandler, null);
}
/// This code added to support custom Unauthorized pages.
else if (filterContext.HttpContext.User.Identity.IsAuthenticated)
{
if (NotifyUrl != null)
filterContext.Result = new RedirectResult(NotifyUrl);
else
// Redirect to Login page.
HandleUnauthorizedRequest(filterContext);
}
/// End of additional code
else
{
// Redirect to Login page.
HandleUnauthorizedRequest(filterContext);
}
}
Вы называете это точно так же, как оригинал AuthorizeAttribute
, за исключением того, что это дополнительное свойство для переопределения Несанкционированное URL страницы:
// Use custom Unauthorized page:
[Security (Roles="Admin, User", NotifyUrl="/UnauthorizedPage")]
// Use default Unauthorized page:
[Security (Roles="Admin, User")]
я задал тот же вопрос здесь: http://stackoverflow.com/questions/2322366/how-do -i-serve-up-an-unauthorized-page-when-a-user-is-not-in-авторизованные роли –
Robert: Спасибо. Я искал похожие сообщения перед публикацией, но не видел ваших. С каким решением вы столкнулись? – royco
Я закончил свой собственный атрибут AuthorizeRoles', используя код из 'AuthorizeAttribute' и изменив его. Если вы можете подождать до завтра, я отправлю код. –