天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

asp.net Forms身份驗證和基于角色的權限訪問

主要思想:Forms身份驗證用來判斷是否合法用戶,當用戶合法后,再通過用戶的角色決定能訪問的頁面。
具體步驟:
    1、創建一個網站,結構如下:
        網站根目錄
            Admin目錄            ---->    管理員目錄
                Manager.ASPx        ---->    管理員可以訪問的頁面
            Users目錄            ---->    注冊用戶目錄
                Welcome.ASPx        ---->    注冊用戶可以訪問的頁面
            Error目錄            ---->    錯誤提示目錄
                AccessError.htm        ---->    訪問錯誤的提示頁面
            default.ASPx            ---->    網站默認頁面
            login.ASPx            ---->    網站登錄頁面
            web.config            ---->    網站配置文件
    2、配置web.config如下:
復制代碼 代碼如下:
        <configuration>
            <system.web>
                <!--設置Forms身份驗證-->
                <authentication mode="Forms">
                    <forms loginUrl="Login.ASPx" name="MyWebApp.APSXAUTH" path="/" protection="All" timeout="30"/>
                </authentication>
                <authorization>
                    <allow users="*"/>
                </authorization>
            </system.web>
        </configuration>

        <!--設置Admin目錄的訪問權限-->
        <location path="Admin">
            <system.web>
                <authorization>
                    <allow roles="Admin"/>
                    <deny users="?"/>
                </authorization>
            </system.web>
        </location>
        <!--設置Users目錄的訪問權限-->
        <location path="Users">
            <system.web>
                <authorization>
                    <allow roles="User"/>
                    <deny users="?"/>
                </authorization>
            </system.web>
        </location>

    3、在login.ASPx頁面的登錄部分代碼如下:
復制代碼 代碼如下:
        protected void btnLogin_Click(object sender, EventArgs e)
        {    
            //Forms身份驗證初始化
            FormsAuthentication.Initialize();
            //驗證用戶輸入并得到登錄用戶,txtName是用戶名稱,txtPassword是登錄密碼
            UserModel um = ValidUser(txtName.Text.Trim(),txtPassword.Text.Trim());
            if (um != null)
            {
             //創建身份驗證票據
             FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
                                            um.Name,
                                            DateTime.Now,
                                            DateTime.Now.AddMinutes(30),
                                            true,
                                            um.Roles,//用戶所屬的角色字符串
                                            FormsAuthentication.FormsCookiePath);
             //加密身份驗證票據
             string hash = FormsAuthentication.Encrypt(ticket);
             //創建要發送到客戶端的cookie
             HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
             if (ticket.IsPersistent)
             {
                cookie.Expires = ticket.Expiration;
             }
             //把準備好的cookie加入到響應流中
             Response.Cookies.Add(cookie);

             //轉發到請求的頁面
             Response.Redirect(FormsAuthentication.GetRedirectUrl(um.Name,false));
            }
            else
            {
             ClientScriptManager csm = this.Page.ClientScript;
             csm.RegisterStartupScript(this.GetType(), "error_tip", "alert('用戶名或密碼錯誤!身份驗證失敗!');", true);
            }
        }    
        //驗證用戶
        private UserModel ValidUser(string name, string password)
        {
            return new UserService().Validate(name, password);
        }

    4、給網站添加處理程序Global.asax,其中通用身份驗證代碼如下:
復制代碼 代碼如下:
        //改造原來的User,給其添加一個用戶所屬的角色數據
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            if (HttpContext.Current.User != null )
            {
                if (HttpContext.Current.User.Identity.IsAuthenticated)
                {
                    if (HttpContext.Current.User.Identity is FormsIdentity)
                    {
                        FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                        FormsAuthenticationTicket ticket = id.Ticket;

                        string userData = ticket.UserData;
                        string[] roles = userData.Split(',');
                        //重建HttpContext.Current.User,加入用戶擁有的角色數組
                        HttpContext.Current.User = new GenericPrincipal(id, roles);
                    }
                }
            }
        }

    5、在Admin目錄中Manager.ASPx頁面加載代碼如下:
復制代碼 代碼如下:
        protected void Page_Load(object sender, EventArgs e)
        {
            //判斷通過身份驗證的用戶是否有權限訪問本頁面
            FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
            //判斷通過身份驗證的用戶是否是Admin角色
            if (!id.Ticket.UserData.Contains("Admin"))
            {
                //跳轉到訪問權限不夠的錯誤提示頁面
                Response.Redirect("~/Error/AccessError.htm", true);
            }
        }
        //安全退出按鈕的代碼
        protected void btnExit_Click(object sender, EventArgs e)
        {
            //注銷票據
            FormsAuthentication.SignOut();
            ClientScriptManager csm = this.Page.ClientScript;
            csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert('您已經安全退出了!');", true);
        }

    6、在Users目錄中Welcome.ASPx頁面加載代碼如下:
復制代碼 代碼如下:
        protected void Page_Load(object sender, EventArgs e)
        {
            //判斷通過身份驗證的用戶是否有權限訪問本頁面
            FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
            //判斷通過身份驗證的用戶是否是User角色
            if (!id.Ticket.UserData.Contains("User"))
            {
                //跳轉到訪問權限不夠的錯誤提示頁面
                Response.Redirect("~/Error/AccessError.htm", true);
            }
        }
        //安全退出按鈕的代碼
        protected void btnExit_Click(object sender, EventArgs e)
        {
            //注銷票據
            FormsAuthentication.SignOut();
            ClientScriptManager csm = this.Page.ClientScript;
            csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert('您已經安全退出了!');", true);
        }

測試結果:
    數據:
        假設有3個用戶,如下:
        ------------------------------------------
        用戶名        密碼        角色字符串
        ------------------------------------------
        sa        sa        Admin,User
        admin        admin        Admin
        user        user        User
        ------------------------------------------
    測試:
        如果使用admin登錄,只能訪問Admin目錄的Manager.ASPx頁面;
        如果使用user登錄,只能訪問Users目錄的Welcome.ASPx頁面;
        使用sa登錄,既能訪問Admin目錄的Manager.ASPx頁面,又能訪問Users目錄的Welcome.ASPx頁面。
    注意:測試時注意及時點擊安全退出按鈕,否則影響測試結果。

AspNet技術asp.net Forms身份驗證和基于角色的權限訪問,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 爱豆剧果冻传媒在线播放 | 学生精品国产在线视频 | 亚洲国产精品久久无套麻豆 | 天天躁人人躁人人躁狂躁 | 一本色道久久88综合日韩精品 | 久久九九日本韩国精品 | 大学生第一次破女在线观看 | 亚洲天堂久久久 | 亚洲成 人a影院青久在线观看 | 最近中文字幕MV高清在线 | 色小妹影院 | 国产小视频国产精品 | 国产中文在线观看 | 10分钟免费观看视频 | 国产三级在线精品男人的天堂 | 男女高潮又爽又黄又无遮挡 | 精品无码乱码AV | 国产超嫩一线天在线播放 | AV色蜜桃一区二区三区 | 刺激一区仑乱 | 鲁大师影院在线视频在线观看 | 欧美91精品久久久久网免费 | 一个人免费播放高清在线观看 | 欧美亚洲日韩国码在线观看 | 99国产精品欲AV蜜桃臀麻豆 | A级毛片无码久久精品免费 a级毛片黄免费a级毛片 | 永久免费精品精品永久-夜色 | 校园全肉高h湿一女多男 | 久久偷拍国2017的 | 久久青青草原精品国产软件 | 国厂精品114福利电影 | 啪啪激情婷婷久久婷婷色五月 | 国产精品单位女同事在线 | 办公室里做好紧好爽H | 51精品国产AV无码久久久 | 男人电影天堂手机 | 在线免费公开视频 | 久久精品一区二区免费看 | 青青草在线视频 | 视频一区二区三区蜜桃麻豆 | 久久久WWW免费人成精品 |