2012年3月16日 星期五

採用ASP.NET內建的會員管理系統,讓各網頁在page_load時能夠驗證會員的角色,並將無此權限的會員導至error.aspx

Protected Sub Page_Load(ByVal sender As ObjectByVal 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做為網頁的titleEx:製作進銷存系統時,若公司有分公司的倉庫,如台北分公司、台中分公司、高雄分公司,則可將rolename設定為台北、台中、高雄等,不過因為ASP.NET組態可以讓會員同時擁有多個角色,所以須特別注意不可讓會員同時擁有兩個分倉以上的角色。
Protected Sub Page_Load(ByVal sender As ObjectByVal 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
End Sub
如此,當使用者的角色為「台北」時,登入後就會顯示「台北倉庫存管理系統」,接著再配合會員的rolename使用在各個網頁程式內,如此就可必免分公司間無權限的人隨意登入及修改庫存內容。

沒有留言:

張貼留言