我有一個基於winforms(VB 2008)的應用程序,我正在開發,我想使用自定義角色進行用戶訪問。添加自定義角色 - VB 2008 Winforms
應用程序佈局: 我有一個主窗體,當某些操作發生時打開登錄窗體。登錄表單實習生使用我創建的認證類來認證用戶並設置訪問權限。在我的應用程序設置頁面上,我將身份驗證模式設置爲應用程序定義,因爲我無法在將部署此應用程序的環境中使用Windows身份驗證。
該應用程序使用MS SQL 2005 db,我在身份驗證過程中使用的3個表是User_Account,User_Roles和User_Access表。 User_Account中的帳戶與User_Roles表中的角色的組合是User_Access表的基礎。使用User_Access表是我如何應用
認證方法中,指派訪問各種功能: 認證用戶,我使用了「My.User.CurrentPrincipal」(下)方法的代碼。 My.User對象效果很好,並且允許在引用當前經過身份驗證的用戶時在整個應用程序中使用「My.User.Name」屬性。
訪問方法: 爲了設置我用我的驗證類中的功能和My.User.Name傳遞一個變量的當前用戶訪問級別。該函數使用For循環內的數據集表適配器和Select Case語句爲用戶分配所有訪問級別(以下功能代碼)。
我的問題: 用戶分配訪問權限,此方法的工作,但它在整個應用程序作爲My.User對象是不持久的。我想找到一種方法來使用它的.IsInRole屬性通過My.User對象創建自定義角色。我想用我的User_Roles表動態創建這些角色。 這將允許在我的應用程序中使用My.User.IsInRole(「MyRole」)語法來使用自定義角色...類似於我目前能夠使用My.User.Name的方式。不幸的是,我目前可以驗證的唯一角色是內置的Windows類型帳戶(管理員...等)。
我發現了許多與ASP.Net相關的信息和例子,以及設置Winforms Windows身份驗證,但沒有直接關係到我的問題。 我認爲有一種方法可以實現這一目標......但我一直無法找到它。任何幫助將不勝感激!!
謝謝你的幫助!
'用戶認證例如:
If Authenticate.CheckPassword(tbxUserName.Text, strPassword) Then
My.User.CurrentPrincipal = New GenericPrincipal(New GenericIdentity(tbxUserName.Text), Nothing)
' 訪問分配例如:
Public Shared Function GetUser(ByVal strUsername As String) As Authenticate
Using UserAdapter As New dbUserTableAdapters.User_AccountsTableAdapter()
Dim UserTable As dbUser.User_AccountsDataTable = UserAdapter.GetByUser(strUsername)
Dim tempUser As New Authenticate() _
With {.ID = UserTable(0).id, _
.Username = UserTable(0).User_Name, _
.Password = UserTable(0).id}
Using AccessAdapter As New dbUserTableAdapters.User_AccessTableAdapter()
Dim AccessTable As dbUser.User_AccessDataTable = AccessAdapter.GetByUser(tempUser.ID)
For c As Integer = 0 To AccessTable.Rows.Count - 1
Select Case AccessTable(c).Role_Id
Case RoleType.SysAdmin
tempUser.AllowSysAdmin = True
Case RoleType.Maintenance
tempUser.AllowMaintenance = True
Case RoleType.ReportAll
tempUser.AllowRptAll = True
Case RoleType.ReportException
tempUser.AllowRptExceptions = True
Case RoleType.EventManagment
tempUser.AllowEventStart = True
Case Else
End Select
Next
Return tempUser
End Using
End Using
End Function
也許這只是我(極有可能),但是當我通過鏈接指向的Microsoft示例時,我仍然只能訪問內置的系統角色(管理員,訪客等)。 我可以設置一個自定義用戶並通過My.User.Name屬性訪問它,但似乎無法弄清楚如何爲用戶創建和分配自定義角色(除基於Windows系統的角色之外)並將它們與My一起使用。 User.IsInRole(「MyCustomRole」)屬性。 你會碰巧有任何建議可能會導致我後來的事情。 謝謝! – 2009-09-14 18:20:09
我沒有從這裏獲得所有東西,我正在從記憶中工作(這不是以前的樣子),但是我根據我記得的內容更新了我的答案。 – ssg31415926 2009-09-15 14:12:29
非常感謝您的更新回覆。 我正在開發的這個項目是我第一次使用這種類型的身份驗證,因此需要一段時間才能完全沉入(我可能會有點粗壯)。讓我咀嚼新的信息一段時間,我應該能夠弄清楚你提供的附加信息。 再次感謝!我很感激你花時間來幫忙。 – 2009-09-16 14:59:45