• MVC身份验证机制


      1 namespace BCPayWeb.Core
      2 {
      3     public class UserLoginAttribute : AuthorizeAttribute
      4     {
      5         protected override bool AuthorizeCore(HttpContextBase httpContext)
      6         {
      7             // httpContext.Session["User"] = new Users() { Id = 1, RoleId = 1 };
      8 
      9             if (httpContext.Session["User"] == null)
     10             {
     11                 httpContext.Response.StatusCode = 401;
     12                 return false;
     13             }
     14 
     15 
     16             base.AuthorizeCore(httpContext);
     17 
     18             return true;
     19         }
     20 
     21         public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
     22         {
     23 
     24             try
     25             {
     26                 string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
     27                 string actionName = filterContext.ActionDescriptor.ActionName;
     28 
     29 
     30                 if (filterContext.HttpContext.Session["User"] == null)
     31                 {
     32                     if (controllerName.ToLower() != "users")
     33                     {
     34                         if (filterContext.HttpContext.Request.IsAjaxRequest())
     35                         {
     36 
     37                             throw new Exception("登录超时,请重新登录。");
     38                         }
     39 
     40                         string url = filterContext.HttpContext.Request.RawUrl;
     41                         if (url.Length < 4 || url.Contains("Excel") || url.Contains("excel"))
     42                         {
     43                             BCPayWebDataContext db = new BCPayWebDataContext();
     44                             url = "/Pay/Phone?mid=2";
     45                         }
     46                         filterContext.Result = new RedirectResult(string.Format("/Users/Login?returnUrl={0}", HttpUtility.UrlEncode(url)));
     47                         return;
     48                     }
     49                 }
     50 
     51                 if (controllerName.ToLower() != "menu")
     52                 {
     53                     BCPayWebDataContext db = new BCPayWebDataContext();
     54                     var user = filterContext.HttpContext.Session["User"] as SerializableUser;
     55 
     56                     var query = from q in db.RoleMenu
     57                                 where q.RoleId == user.RoleId && q.Menu.Url.ToLower() == string.Format("/{0}/{1}", controllerName, actionName).ToLower()
     58                                 select q;
     59 
     60                     if (query.Count() < 1)
     61                     {
     62                         throw new Exception("您没有权限访问此页面。");
     63                     }
     64                 }
     65 
     66 
     67                 filterContext.HttpContext.Session["Error"] = null;
     68 
     69                 base.OnAuthorization(filterContext);
     70             }
     71             catch (Exception ex)
     72             {
     73                 try
     74                 {
     75 
     76                     filterContext.HttpContext.Session["Error"] = ex.Message;
     77                     filterContext.HttpContext.Response.Write(ex.Message);
     78                     filterContext.HttpContext.Response.End();
     79                     filterContext.Result = new RedirectResult("/Users/Login");
     80                 }
     81                 catch (Exception)
     82                 {
     83                 }
     84             }
     85 
     86         }
     87 
     88         protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
     89         {
     90 
     91             if (filterContext.HttpContext.Request.IsAjaxRequest())
     92             {
     93             }
     94             else
     95             {
     96                 string url = filterContext.HttpContext.Request.RawUrl;
     97                 if (url.Length < 4)
     98                 {
     99                     url = "/Pay/Phone?mid=2";
    100                 }
    101                 filterContext.Result = new RedirectResult(string.Format("/Users/Login?returnUrl={0}", HttpUtility.UrlEncode(url)));
    102             }
    103         }
    104     }
    105 }

    引用时 只需在acticon或方法名上上加入

    [UserLoginAttribute]即可

     1  [UserLoginAttribute]
     2     public class MenuController : Controller
     3     {
     4         //左侧导航
     5         // GET: /Menu/
     6         public PartialViewResult Index()
     7         {
     8             var user = Session["User"] as SerializableUser;
     9             if (user != null)
    10             {
    11                 BCPayWebDataContext db = new BCPayWebDataContext();
    12 
    13                 var query = from q in db.RoleMenu
    14                             where q.RoleId == user.RoleId && q.Menu.IsShow == 1
    15                             orderby q.Menu.Id ascending
    16                             select new MyMenu
    17                             {
    18                                 Id = q.Menu.Id,
    19                                 ParentId = q.Menu.ParentId,
    20                                 Tip = q.Menu.Tip,
    21                                 Title = q.Menu.Title,
    22                                 Type = q.Menu.Type,
    23                                 Url = q.Menu.Url,
    24                                 Sort = q.Menu.Sort,
    25                             };
    26 
    27                 var lst = query.ToList();
    28 
    29                 lst.Sort(SortMenuCompare);
    30 
    31                 return PartialView(lst);
    32             }
    33 
    34 
    35             return PartialView();
    36         }
    37 
    38 
    39         private static int SortMenuCompare(MyMenu m1, MyMenu m2)
    40         {
    41             return m1.Sort.CompareTo(m2.Sort);
    42         }
    43 
    44     }


  • 相关阅读:
    iOS:Objective-C中Self和Super详解
    调试工具Instruments----Core Animation
    iOS开发之复制字符串到剪贴板
    Copy 和 mutableCopy
    TCP/IP,Http,Socket,XMPP的区别
    iOS程序中的内存分配 栈区堆区全局区(转)
    iOS常见算法(二分法 冒泡 选择 快排)
    老司机带你走进Core Animation
    C# 爬虫小程序
    C# 房贷计算器
  • 原文地址:https://www.cnblogs.com/CZAO/p/4160922.html
Copyright © 2020-2023  润新知