webconfig許可權控制

來源:互聯網
上載者:User

今天偶然看了一篇關於Forms應用的文章收益頗多,寫出來給大家分享。

   說起對網站許可權,記得以前做法是每個頁面都進行判斷,對webconfig 的使用少之又少今天說說webconfig 對網站許可權的判斷。

   戶檔案夾(我們暫訂user檔案夾):只有使用者登入以後才能訪問。否則該訪客只能訪問user檔案夾的登入頁面(user_login.aspx)

管理員檔案夾( 暫訂admin檔案夾):管理員檔案夾不讓任何人服務,當使用者登入以後只能訪問管理員登陸頁(admin_login.aspx),管理員登陸後才能訪問全部頁面。

根目錄:根目錄可以讓任何人訪問。

 

目錄結構如下:

 

 

 

 

 

第一步:

    根目錄下config代碼:

     <authentication mode="Forms">     

       <forms name="UserCookies" loginUrl="Default.aspx"></forms>

      </authentication>

      <authorization>

        <allow users="*"/>

      </authorization>

 

第二部:

    Global.asax

    頭部添加 

     <%@ Import Namespace="System.Security.Principal" %>

 

 

     void Application_AuthenticateRequest(object sender, EventArgs e)

    {

        if (HttpContext.Current.User != null)

        {

            //如果使用者通過驗證,則該項不為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 = new GenericPrincipal(id, roles);//重新分配角色

                }

            }

        }

    }

 

第三部:

admin檔案夾config 檔案

 

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<appSettings/>

<connectionStrings/>

<location path="admin_login.aspx">

    <system.web>

      <authorization>

        <allow roles="user"/>

      </authorization>

    </system.web>

</location>

<system.web>

    <authorization>

      <allow roles="admin"/>

      <deny users="*"/>

    </authorization>

</system.web>

</configuration>

 

admin_login.aspx

 

 

 

cs 代碼如下:

protected void Button1_Click(object sender, EventArgs e)

    {

        if (tbUserName.Text == "xiaomiao")

        {

            //產生驗證票據,其中包括使用者名稱、生效時間、到期時間、是否永久儲存和使用者資料等。而關於使用者角色的資訊,我們儲存在使用者資料中。

            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, tbUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30), true, "Admin");

            string cookieStr = FormsAuthentication.Encrypt(ticket);//對票據進行加密

            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);

            /*儲存到cookie中。cookie的名字要與我們前面在設定檔中所寫的name值一樣。因為,當cookie保留在本地後,下次再檢查使用者權限的時候就會自動尋找與forms名稱相同的cookie,並傳送給伺服器端進行檢驗。如果在本地找不到cookie,就自然無法通過驗證。*/

            cookie.Expires = ticket.Expiration;

            cookie.Path = FormsAuthentication.FormsCookiePath;

            Response.Cookies.Add(cookie);

            Response.Redirect("default.aspx");//登陸成功後跳轉到index.aspx

        }

    }

 

 

第四步:

 

user檔案夾config代碼

<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <appSettings/>

    <connectionStrings/>

<location path="user_login.aspx">

    <system.web>

      <authorization>

        <allow users="*"/>

      </authorization>

    </system.web>

</location>

    <system.web>

      <authorization>

        <allow roles="user,admin"/>

        <deny users="*"/>

      </authorization>

    </system.web>

</configuration>

 

user_login.aspx

 

 

 

CS代碼:

protected void Page_Load(object sender, EventArgs e)

    {

        //判斷使用者是否已經登陸,且角色為user

        if (User.Identity.IsAuthenticated && User.IsInRole("user"))

        {//如果通過驗證,則直接跳轉到index.aspx

            Response.Redirect("default.aspx");

        }

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        if (tbUserName.Text == "xiaomiao")

        {

            //產生驗證票據,其中包括使用者名稱、生效時間、到期時間、是否永久儲存和使用者資料等。而關於使用者角色的資訊,我們儲存在使用者資料中。

            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, tbUserName.Text, DateTime.Now, DateTime.Now.AddMinutes(30), true, "User");

            string cookieStr = FormsAuthentication.Encrypt(ticket);//對票據進行加密

            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, cookieStr);

            /*儲存到cookie中。cookie的名字要與我們前面在設定檔中所寫的name值一樣。因為,當cookie保留在本地後,下次再檢查使用者權限的時候就會自動尋找與forms名稱相同的cookie,並傳送給伺服器端進行檢驗。如果在本地找不到cookie,就自然無法通過驗證。*/

            cookie.Expires = ticket.Expiration;

            cookie.Path = FormsAuthentication.FormsCookiePath;

            Response.Cookies.Add(cookie);

            Response.Redirect("default.aspx");//登陸成功後跳轉到index.aspx

        }

 

    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.