2012/2/2 11:08 |
閱讀數 : 3229
1 人推薦
我要推薦
|
| 文章分類 :
(.NET)ASP.NET
ASP.NET權限控管
訂閱
緣起:
最近有位網友詢問了小喵,如果希望使用者登入後,依照他的角色(或者其他的條件),而轉到指定的頁面去,應該怎麼做?小喵做了個小小的範例提供有類似問題的朋友參考看看
Login控制項的幾個事件
首先,來看看在Login控制項中的幾個事件:
- LoggingIn:在Login控制項中,按下登入後,進行驗證前,會觸發的事件
- Authenticate:如果不是使用內建會員驗證機制,要自己處理驗證,或者有自己的會員資料庫,自己做驗證時,需要用到的事件。
關於自定驗證機制,請參考小喵這一篇:ASP.NET 2.0如何使用Login來存取自己的使用者資料庫。 - LoggedIn:內建機制驗證成功後,或者Authenticate事件中自定驗證成功,並設定【e.Authenticated = Authenticated】
以上三個事件,如果驗證成功,觸發的順序為【LoggingIn→Authenticate→LoggedIn】。
如果驗證失敗,則不會觸發LoggedIn,只會是【LoggingIn→Authenticate】
內建會員、角色驗證
有了以上三個事件的了解後,接著計可以來了解怎麼做到【登入成功後】,依照不同的Role或者其他條件,轉到指定的頁面
如果是內建的會員、角色,由於會員的驗證會是自動的運作,所以需要做的是,在內建機制驗證成功時,來判斷登入的帳號是哪個角色,接著只要重新導向到那個畫面就可以了。
所以只需要在Login控制項中的【LoggedIn】事件中,像以下這樣就可以了:
Protected Sub Login1_LoggedIn(sender As Object, e As System.EventArgs) Handles Login1.LoggedIn
'判斷角色是否為Admin
If Roles.IsUserInRole(Login1.UserName.ToString, "Admin") Then
'如果是,轉址到~/Admin/PAdmin1.aspx
Response.Redirect("~/Admin/PAdmin1.aspx")
End If
'判斷角色是否為Member
If Roles.IsUserInRole(Login1.UserName.ToString, "Member") Then
'如果是,轉址到~/Member/PMem1.aspx
Response.Redirect("~/Member/PMem1.aspx")
End If
End Sub
自定會員、角色驗證
如果是自定的會員、角色驗證,那麼在驗證的【Authenticate】中,除了要寫好驗證的機制外,另外就是在裡面多去判斷自己額外的條件(例如角色),如果符合就轉址到指定的網址
Protected Sub Login1_Authenticate(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.AuthenticateEventArgs) Handles Login1.Authenticate
Try
'呼叫檢查帳號密碼程式,成功會傳回True
If ChkLogin(Login1.UserName, Login1.Password) Then
'執行FormsAuthentication.RedirectFromLoginPage,並且將是否記住帳號一併處理
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet)
'呼叫檢查角色的或其他條件的Function,依實際需求修改
If ChkCond(Login1.UserName) Then
Dim RedirectUrl As String = "" '這裡放要轉去的網址
Response.Redirect(RedirectUrl)
End If
Else
Throw New Exception("登入失敗")
End If
Catch ex As Exception
lblErrMsg.Text = ex.Message
End Try
End Sub
以下是簽名:
-
歡迎轉貼本站的文章,不過請在貼文主旨上加上【轉貼】,並在文章中附上本篇的超連結與站名【topcat姍舞之間的極度凝聚】,感恩大家的配合。
-
如果您覺得此篇對您或者對大家有幫助,敬請按一下【推薦】,感恩!! ^_^

關連文章
[課程]跨行動裝置網站開發--上課錄影懶人包
[ASP.NET]Ajax Control Toolkit 遇到【無效的FORMATEC結構】
[小技巧]如何增減CEditor的表情碼