天天看點

一起談.NET技術,在 ASP.NET 中實作不同角色的使用者使用不同登入界面的方法

  很多使用者在開發 ASP.NET 應用程式時都有這樣的需求:管理者角色的賬戶使用管理者的登入界面進行登入,普通使用者角色的賬戶使用普通使用者的登入界面進行登入。由于ASP.NET的web.config裡隻能使用一個 authentication mode="Forms"節點,是以,要實作不同使用者采用不同的登入界面,一個辦法就是建立一個管理者專用的虛拟目錄,并設定為應用程式來實作。下面介紹另外一種采用重定向的辦法來解決這個問題。

  本文介紹的方法原理是根據登入界面的傳回位址進行判斷,然後重定向到不同的頁面。下面就是實作的詳細過程。

  1. 建立一個網站,在網站裡建立Admin檔案夾和User檔案夾,分别存放admin和普通使用者所使用的檔案。也可以隻設定一個 Admin 檔案夾。由于本方法采用的判斷傳回路徑的方法,是以,要能從路徑中區分出哪些是admin使用者使用的檔案夾。當然,采用其他的判斷方法也是可以的。

  2. 在網站根目錄下分别建立3個登入檔案:Login.aspx、UserLogin.aspx和AdminLogin.aspx。其中Login.aspx檔案起位址轉換的作用,

  Login.aspx檔案的主要内容:

  在這個檔案的代碼中,如果ReturnUrl中含有"/admin/",就重定向到AdminLogin.aspx登入界面;否則,就重定向到 UserLogin.aspx登入界面。

  UserLogin.aspx這個檔案的内容如下:

  這個檔案将驗證資訊儲存後,傳回最初的請求頁面。注意:這裡連接配接資料庫驗證使用者名和密碼的過程省略過去了。

  AdminLogin.aspx這個檔案的全部内容如下:

注意:這裡連接配接資料庫驗證使用者名和密碼的過程省略過去了。

  3. 在Global的AuthenticateRequest 事件(一定要注意:不是 AuthorizeRequest 事件)裡将角色資訊附加到目前使用者的上下文中。

  4. 在web.config檔案中,允許登入檔案的匿名通路,以便在未登入的情況下顯示登入界面,注意:如果包含圖檔、css等檔案,也需要設定這些資源允許匿名通路。

  5. 這樣,當通路admin檔案夾下的内容時,會直接轉到AdminLogin.aspx界面。在登入之後,就可以在/Admin/檔案夾下的頁面中使用下面的方法得到目前登入的使用者名和所具有的角色,根據角色來判斷目前使用者是否有權操作:

為了簡單起見,可以寫一個Admin使用的基類頁面,統一在基類頁面中進行權限的處理。

繼續閱讀