.net MVC 登陸模塊後臺代碼

首先是攔截器

 public class AuthLoginAttribute : ActionFilterAttribute
    {
        public bool IsLogin = true;
        /// <summary>
        /// 登錄狀態
        /// </summary>
        public AuthLoginAttribute()
        {
            IsLogin = true;
        }

        /// <summary>
        /// 登錄狀態
        /// </summary>
        /// <param name="islogin"></param>
        public AuthLoginAttribute(bool islogin)
        {
            IsLogin = islogin;
        }

        /// <summary>
        /// 判斷登錄狀態
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //排除例外
            if (!IsLogin)
                return;
            string loginUrl = "/Home/Login";
            //上一次請求地址
            string refUrl = filterContext.HttpContext.Request.UrlReferrer != null ? filterContext.HttpContext.Request.UrlReferrer.ToString() : loginUrl;
            //控制器
            string controlName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName.ToLower();
            //方法
            string actionName = filterContext.ActionDescriptor.ActionName.ToLower();
            //子方法
            bool isChildAction = filterContext.IsChildAction;
            //是否爲異步請求
            bool isAjax = filterContext.HttpContext.Request.IsAjaxRequest();
            UserBaseController controller = filterContext.Controller as UserBaseController;
            if (!controller.IsLogin)
            {
                //異步處理
                if (isAjax)
                {
                    //這裏可以添加一些過濾登錄的異步操作如:公共上傳圖片
                    JsonResult jr = new JsonResult();
                    jr.Data = new BaseResponse<object>
                    {
                        ErrorCode = 500,
                        Message = "請先登錄!",
                        Data = "need login"
                    }; 
                    filterContext.Result = jr;
                }
                else if (filterContext.IsChildAction)
                {
                    filterContext.Result = new ContentResult() { Content = "請先登錄!" };
                }
                else
                {
                    string pq = null;
                    if (filterContext.HttpContext.Request.Url != null)
                    {
                        pq = filterContext.HttpContext.Request.Url.PathAndQuery;
                    }
                    filterContext.Result = new RedirectResult(loginUrl);
                }
            }
            else
            {
                //權限判斷
                var userAuthority = OperSession.UserAuthority;
                string noAuth = "/Home/NoAuthorityUser?back=" + HttpUtility.UrlEncode(refUrl);
                if (userAuthority == null || userAuthority.Count == 0)
                {
                    filterContext.Result = new RedirectResult(noAuth);
                }
                else
                {
                    string route = "/" + controlName + "/" + actionName;
                    //排除首頁登陸,異步
                    if (route == "/home/index" || route == "/home/login" || isAjax || route == "/admin/userprofile" || route == "/admin/index") return;
                    //進行檢測 是否有可訪問的權限
                    if (!userAuthority.Exists(a => a.Action?.ToLower() == actionName && a.Controller?.ToLower() == controlName))
                    {
                        filterContext.Result = new RedirectResult(noAuth);
                    }
    
                }
            }
        }
    }

登陸驗證代碼

  /// <summary>
        /// 用戶登錄
        /// </summary>
        /// <param name="uName"></param>
        /// <param name="uPwd"></param>
        /// <param name="uIP">客戶端IP</param>
        /// <param name="sessionID">sessionID</param>
        /// <param name="isMD5">是否MD5加密</param>
        /// <returns></returns>
        public LoginResult ValidateLogin(string uName, string uPwd, string uIP, string sessionID, bool isMD5 = true)
        {
            string pwdMd5 = uPwd;
            if (isMD5)
            {
                pwdMd5 = uPwd.Crypt_MD5_Encode(32);
            }
            VUser loginUser = GetUser(uName, pwdMd5);
            if (loginUser == null)
            {
                return new LoginResult()
                {
                    Message = "賬號或密碼錯誤。",
                    ResultType = 0
                };
            }
            if (!loginUser.IsEnable)
            {
                return new LoginResult()
                {
                    Message = "賬號已禁用,請聯繫管理員。",
                    ResultType = 0
                };
            }
            //用戶權限初始化
            var urCatalogue = loginUser.Permissions.IsNullOrEmpty()?new List<VPermission>():PermissionBll.GetIntence().GetUserCatalog(loginUser.Permissions);
            if (urCatalogue.Count > 0)
            {
                //IList<Dictionary<int, IEnumerable<SysRoleExtensionInfo>>> menuData = new IList<Dictionary<int, IEnumerable<SysRoleExtensionInfo>>>();
                //var pMenu = urCatalogue.Where(a => a.ParentID == 0);
                //foreach (var pItem in pMenu)
                //{
                //    var cMenu = urCatalogue.Where(a => a.ParentID == pItem.ID);
                //    foreach (var cItem in cMenu)
                //    {
                //        var ccMenu = urCatalogue.Where(a => a.ParentID == cItem.ID);
                //        foreach (var ccItem in ccMenu)
                //        {
                //            menuData.Add(pItem.CatalogueID, urCatalogue.Where(a => a.ParentID == pItem.ID));
                //        }
                //    }
                //}
                loginUser.ProjPermissions = loginUser.DataPermissions.IsNullOrEmpty()?new List<DataPermission>():loginUser.DataPermissions.ToObjectFromJson<List<DataPermission>>();
                //權限記錄
                OperSession.UserAuthority = urCatalogue.ToList();
                //記錄登錄用戶信息
                loginUser.LoginSessionID = sessionID;
                loginUser.LoginIP = uIP;
                Helper.OperSession.UserInfo = loginUser;
                return new LoginResult()
                {
                    Message = "登錄成功。",
                    ResultType = 1
                };
            }
            return new LoginResult()
            {
                Message = "該登錄用戶沒有權限。",
                ResultType = 0
            };
        }
public class OperSession
    {
        /// <summary>
        /// 後臺操作員登錄信息
        /// </summary>
        public static VUser UserInfo
        {
            get
            {
                if (HttpContext.Current.Session[ConstVar.UserSessionKey] != null)
                {
                    return HttpContext.Current.Session[ConstVar.UserSessionKey] as VUser;
                }
                return null;
            }
            set
            {
                HttpContext.Current.Session[ConstVar.UserSessionKey] = value;
            }
        }

        /// <summary>
        /// 用戶權限
        /// </summary>
        public static List<VPermission> UserAuthority
        {
            get
            {
                if (HttpContext.Current.Session[ConstVar.UserAuthorityKey] != null)
                {
                    return HttpContext.Current.Session[ConstVar.UserAuthorityKey] as List<VPermission>;
                }
                return null;
            }
            set
            {
                HttpContext.Current.Session[ConstVar.UserAuthorityKey] = value;
            }
        }
    }
 public class BaseResponse
    {
        public bool Success { get; set; }

        public int ErrorCode { get; set; }


        public string Message { get; set; }


        public object Data { get; set; } 
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章