Protected Sub Page_Load(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles Me.Load
Dim name As String = My.User.Name
Dim db As New SqlDataSource("Data Source=.\SQLEXPRESS;AttachDbfilename=|DataDirectory|\ASPNETDB.MDF; Integrated Security=True; User Instance=True", "")
db.SelectCommand = "select rolename from aspnet_Roles where RoleId = (select RoleId from aspnet_UsersInRoles where userid = (select userid from aspnet_Users where UserName ='" & name & "' ) )"
Dim dv As New Data.DataView
dv = db.Select(New DataSourceSelectArguments)
If dv.Table.Rows(0).Item(0).ToString = "admin" Then
Label1.Text = “會員:” & name & “登入中”
Else
Response.Redirect("error.aspx")
End If
End Sub
當然上述的作法,可以將網頁置於同一資料夾後,再透過ASP.NET組態設定角色的權限即可達到驗證(坊間關於ASP.NET的書非常多,請自行參考),不過有時不同的角色,使用的網頁卻是一樣時,這樣處理又太麻煩,所以我的目的是要在同一資料夾下,利用rolename做為網頁的title,Ex:製作進銷存系統時,若公司有分公司的倉庫,如台北分公司、台中分公司、高雄分公司,則可將rolename設定為台北、台中、高雄等,不過因為ASP.NET組態可以讓會員同時擁有多個角色,所以須特別注意不可讓會員同時擁有兩個分倉以上的角色。
Protected Sub Page_Load(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles Me.Load
Dim name As String = My.User.Name
Dim db As New SqlDataSource("Data Source=.\SQLEXPRESS;AttachDbfilename=|DataDirectory|\ASPNETDB.MDF; Integrated Security=True; User Instance=True", "")
db.SelectCommand = "select rolename from aspnet_Roles where RoleId = (select RoleId from aspnet_UsersInRoles where userid = (select userid from aspnet_Users where UserName ='" & name & "' ) )"
Dim dv As New Data.DataView
dv = db.Select(New DataSourceSelectArguments)
If dv.Table.Rows(0).Item(0).ToString = "guest" Then
Response.Redirect("error.aspx")
Else
Label_title.Text = dv.Table.Rows(0).Item(0).ToString & “倉庫存管理系統”
End If
如此,當使用者的角色為「台北」時,登入後就會顯示「台北倉庫存管理系統」,接著再配合會員的rolename使用在各個網頁程式內,如此就可必免分公司間無權限的人隨意登入及修改庫存內容。