中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Lind.DDD.Authorization用(yong)戶授權介(jie)紹

回到目錄

Lind.DDD.Authorization是(shi)Lind.DDD框架(jia)的(de)組成部分,之所以把它(ta)封(feng)裝到框架(jia)里,原因就是(shi)它(ta)的(de)通用(yong)性,幾乎在任(ren)何(he)一(yi)個系(xi)統中,都(dou)少不了用(yong)戶(hu)授(shou)權(quan)功(gong)能(neng),用(yong)戶(hu)授(shou)權(quan)對于任(ren)何(he)一(yi)個系(xi)統來說都(dou)是(shi)必要的(de),像管(guan)理型的(de)頁面都(dou)需(xu)要用(yong)戶(hu)先去登(deng)陸,然后拿到憑(ping)證,才可(ke)以進行訪問(wen),這在MVC和(he)WebApi體系(xi)結構里是(shi)很容易實現(xian)的(de),像過濾器(qi)里的(de)AuthorizeAttribute和(he)ActionFilterAttribute都(dou)可(ke)以實現(xian)用(yong)戶(hu)授(shou)權(quan)的(de)功(gong)能(neng)。

AuthorizeAttribute和ActionFilterAttribute

AuthorizeAttribute這個過(guo)濾(lv)器從字面(mian)上就可以看出它的(de)(de)(de)功能,它主要(yao)(yao)用(yong)(yong)在(zai)用(yong)(yong)戶角色授權(quan)上,對于我(wo)(wo)們(men)(men)的(de)(de)(de)系(xi)統(tong)來說(shuo),那就是哪些頁面(mian)需要(yao)(yao)登陸,就把哪個Action添加這個特性,它有方法OnAuthorization,表示當(dang)頁面(mian)加載之前(qian),去判斷用(yong)(yong)戶是否(fou)有訪問本action的(de)(de)(de)權(quan)限(xian),我(wo)(wo)們(men)(men)可以根據自己的(de)(de)(de)需要(yao)(yao)去override它;ActionFilterAttribute過(guo)濾(lv)器是我(wo)(wo)們(men)(men)平時(shi)用(yong)(yong)的(de)(de)(de)最多的(de)(de)(de),即(ji)在(zai)action執行前(qian),后,View渲染(ran)前(qian),渲染(ran)后的(de)(de)(de)跟蹤,我(wo)(wo)們(men)(men)在(zai)使用(yong)(yong)時(shi),重(zhong)寫對應的(de)(de)(de)方法,即(ji)可以實現對各(ge)個步驟的(de)(de)(de)跟蹤。

實現原理,方法攔截

在mvc里(li),過濾(lv)器(qi)的含義(yi)就是方(fang)法(fa)攔(lan)(lan)截,這個概(gai)念(nian)和Aop不(bu)某而(er)合,都是對方(fang)法(fa)進(jin)行(xing)攔(lan)(lan)截,然后進(jin)行(xing)二(er)次加(jia)工(gong),過濾(lv)器(qi)的原理也一樣,在進(jin)行(xing)攔(lan)(lan)截后,可以去(qu)填充你自己(ji)的業(ye)務邏輯,然后選擇繼續渲染(ran)還是離開頁面。

AuthorizationLoginFilter過濾器的實現

下(xia)面是我自己(ji)整理的,用戶授權的一個過濾器,分(fen)享一下(xia)

    /// <summary>
    /// 授(shou)權過濾(lv)器(qi)
    /// Function:MVC模式下使用(yong)
    /// Author:Lind.zhang
    /// </summary>
    public class AuthorizationLoginFilter : AuthorizeAttribute
    {

        /// <summary>
        /// 驗證(zheng)失敗后所指向的控制(zhi)器和action
        /// 可(ke)以在(zai)使(shi)用特(te)性時為它進行(xing)賦值
        /// </summary>
        public AuthorizationLoginFilter(string failControllerName = "Home", string failActionName = "Login")
        {
            _failControllerName = failControllerName;
            _failActionName = failActionName;
        }
        public string _failControllerName, _failActionName;
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            //被添加AllowAnonymousAttribute特(te)性的過濾器將不參加AuthorizationLoginFilter的驗證
            bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) ||
                filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true);

            //為登陸頁(ye)添(tian)加(jia)例外,其它(ta)頁(ye)都自動在global.asax里添(tian)加(jia)到全局(ju)過濾器中,MVC3及(ji)以(yi)后版(ban)本支持它(ta)
            if (!skipAuthorization)
            {
                if (!CurrentUser.IsLogin)
                {
                    filterContext.Result = new RedirectToRouteResult("Default", new RouteValueDictionary { 
                     { "Action",_failActionName },
                     { "Controller", _failControllerName}, 
                     { "returnUrl", HttpContext.Current.Request.Url.ToString() } });
                }
            }
        }
    }

授權模塊的CurrentUser的實現

對于過濾(lv)器把沒有(you)登(deng)(deng)陸(lu)的用(yong)戶(hu)指(zhi)引(yin)登(deng)(deng)陸(lu)頁后,用(yong)戶(hu)將(jiang)進(jin)行登(deng)(deng)陸(lu)操作,然后Lind.DDD要(yao)(yao)做什么?需要(yao)(yao)將(jiang)用(yong)戶(hu)標(biao)示(shi),角(jiao)色(se)信息,權(quan)限信息進(jin)行存儲,這時就是我們CurrentUser登(deng)(deng)場的時候(hou)了,設計很簡(jian)單,一(yi)個方法用(yong)來(lai)持久化(hua)用(yong)戶(hu)授權(quan)的對象,幾個屬性用(yong)來(lai)返回需要(yao)(yao)返回的內(nei)容,呵(he)呵(he) !

    /// <summary>
    /// 當(dang)前登(deng)陸的(de)用戶信(xin)息
    /// 可以有Redis Session和Session進行實現
    /// </summary>
    public class CurrentUser
    {
        #region Public Properties
        /// <summary>
        /// 當然登(deng)陸的用(yong)戶ID
        /// </summary>
        public static string UserID
        {
            get
            {
                return (System.Web.HttpContext.Current.Session["UserID"] ?? string.Empty).ToString();
            }
        }
        /// <summary>
        /// 當前(qian)登陸(lu)的用戶名(ming)
        /// </summary>
        public static string UserName
        {
            get
            {
                return (System.Web.HttpContext.Current.Session["UserName"] ?? string.Empty).ToString();
            }
        }
        /// <summary>
        /// 用戶角色
        /// </summary>
        public static string Role
        {
            get
            {
                return (System.Web.HttpContext.Current.Session["Role"] ?? string.Empty).ToString();
            }
        }
        /// <summary>
        /// 用戶權限
        /// 增,刪,改,查
        /// </summary>
        public static string Authority
        {
            get
            {
                return (System.Web.HttpContext.Current.Session["Authority"] ?? string.Empty).ToString();
            }
        }
        /// <summary>
        /// 當前登陸(lu)用戶存儲的擴展信息
        /// </summary>
        public static string ExtInfo
        {
            get
            {
                return (System.Web.HttpContext.Current.Session["ExtInfo"] ?? string.Empty).ToString();
            }
        }
        /// <summary>
        /// 是否登(deng)陸
        /// </summary>
        public static bool IsLogin
        {
            get
            {
                return !string.IsNullOrWhiteSpace(UserID);
            }
        }
        #endregion

        #region Public Methods
        /// <summary>
        /// 退出登陸
        /// </summary>
        public static void Exit()
        {
            System.Web.HttpContext.Current.Session.Abandon();//清(qing)除(chu)全(quan)部(bu)Session
        }
        /// <summary>
        /// 將用(yong)戶信息持久化到Session
        /// </summary>
        /// <param name="userID"></param>
        /// <param name="userName"></param>
        /// <param name="ExtInfo"></param>
        public static void Serialize(
            string userID,
            string userName,
            string extInfo = "",
            string role = "",
            string authority = "")
        {
            System.Web.HttpContext.Current.Session["UserID"] = userID;
            System.Web.HttpContext.Current.Session["UserName"] = userName;
            System.Web.HttpContext.Current.Session["ExtInfo"] = ExtInfo;
            System.Web.HttpContext.Current.Session["Role"] = role;
            System.Web.HttpContext.Current.Session["Authority"] = authority;

        }
        #endregion

    }

OK,對于(yu)Lind.DDD.Authorization用(yong)戶授權這塊就說到這里,如果對大家(jia)有幫(bang)助,請您點個贊(zan)吧!

回到目錄

 

posted @ 2016-01-06 22:45  張占嶺  閱讀(2267)  評論(1)    收藏  舉報