protected virtual HttpValidationStatus OnCacheAuthorization(System.Web.HttpContextBase httpContext) { if (httpContext == null) { throw new System.ArgumentNullException("httpContext"); } SmartAuthorizeAttribute.AuthorizeResult resut = this.AuthorizeCore(httpContext); return((resut == SmartAuthorizeAttribute.AuthorizeResult.Success) ? HttpValidationStatus.Valid : HttpValidationStatus.IgnoreThisRequest); }
public virtual void OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) { throw new System.ArgumentNullException("filterContext"); } System.Console.WriteLine("验证 {0}.{1}".FormatWith(new object[] { filterContext.Controller.GetType().Name, filterContext.ActionDescriptor.ActionName })); SmartAuthorizeAttribute.AuthorizeResult result = this.AuthorizeCore(filterContext.HttpContext); if (result == SmartAuthorizeAttribute.AuthorizeResult.Success) { System.Web.HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache; cachePolicy.SetProxyMaxAge(new System.TimeSpan(0L)); cachePolicy.AddValidationCallback(new HttpCacheValidateHandler(this.CacheValidateHandler), null); } else { this.HandleUnauthorizedRequest(filterContext, result); } }
protected virtual void HandleUnauthorizedRequest(AuthorizationContext filterContext, SmartAuthorizeAttribute.AuthorizeResult result) { bool isAjaxRequest = filterContext.HttpContext.Request.IsAjaxRequest(); if (isAjaxRequest) { filterContext.Result = new InsufficientAuthorizationsResult(); } else { System.Web.Routing.RouteData routeData = filterContext.RouteData; string virtualPath = routeData.Route.GetVirtualPath(filterContext.RequestContext, routeData.Values).VirtualPath; if (result == SmartAuthorizeAttribute.AuthorizeResult.SessionOut) { System.Web.Routing.RouteValueDictionary dict = new System.Web.Routing.RouteValueDictionary(new { controller = "Error", action = "SessionOut", area = "", returnUrl = virtualPath }); filterContext.Result = new RedirectToRouteResult(dict); } else { if (result == SmartAuthorizeAttribute.AuthorizeResult.NotInRoles) { filterContext.Controller.TempData["Error_InsufficientAuthorization_Roles"] = this._rolesSplit; System.Web.Routing.RouteValueDictionary dict = new System.Web.Routing.RouteValueDictionary(new { controller = "Error", action = "InsufficientAuthorization", area = "" }); filterContext.Result = new RedirectToRouteResult(dict); } else { if (result == SmartAuthorizeAttribute.AuthorizeResult.NotInUsers) { filterContext.Controller.TempData["Error_InsufficientAuthorization_Users"] = this._usersSplit; System.Web.Routing.RouteValueDictionary dict = new System.Web.Routing.RouteValueDictionary(new { controller = "Error", action = "InsufficientAuthorization", area = "" }); filterContext.Result = new RedirectToRouteResult(dict); } else { System.Web.Routing.RouteValueDictionary dict = new System.Web.Routing.RouteValueDictionary(new { controller = "Account", action = "Login", area = "", returnUrl = virtualPath }); filterContext.Result = new RedirectToRouteResult(dict); } } } } }