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);
                        }
                    }
                }
            }
        }