Ecco il codice dalla mia implementazione modificata di AuthorizeAttribute
; L'ho chiamato SecurityAttribute
. L'unica cosa che ho cambiato è il metodo OnAuthorization
, e ho aggiunto una proprietà stringa aggiuntiva per l'URL per reindirizzare a una pagina non autorizzata:
// 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);
}
}
Si chiamano allo stesso modo come l'originale AuthorizeAttribute
, tranne che non è una proprietà aggiuntiva per ignorare il non autorizzato URL della pagina:
// Use custom Unauthorized page:
[Security (Roles="Admin, User", NotifyUrl="/UnauthorizedPage")]
// Use default Unauthorized page:
[Security (Roles="Admin, User")]
fonte
2010-03-24 17:50:50
ho chiesto la stessa domanda qui: http://stackoverflow.com/questions/2322366/how-do -i-servire-su-un-non autorizzato-pagina-quando-un-utente-non-nei-ruoli-autorizzati –
Robert: Grazie. Ho cercato post simili prima di postare, ma non ho visto i tuoi. Con quale soluzione sei andato? – royco
Ho finito con il rollare il mio attributo 'AuthorizeRoles', usando il codice da' AuthorizeAttribute' e modificandolo. Se puoi aspettare fino a domani, posterò il codice. –