添加自定义角色 - VB 2008米的WinForms
-
21-09-2019 - |
题
我有一个WinForms(VB 2008)基于应用程序,我发展,我想使用自定义角色的用户访问。
<强>应用布局:强> 我有当发生某些操作打开一个登录表单的主要形式。登录表单实习生使用,我已经创建了一个验证类,来验证用户并设置访问权限。在我的应用程序设置页面,我有认证方式为应用程序定义的,因为我不能在这个将要部署的环境中使用Windows身份验证。
该应用程序使用MS SQL2005分贝和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传递作为一个变量。该功能使用数据集表适配器和Select Case语句内的for循环分配的所有用户(以下功能代码)的访问级别。
我问题:强> 给用户分配访问权限,此方法的工作,但它在整个应用程序作为My.User对象是不持久的。我想找到一种方法,通过使用其.IsInRole属性My.User对象来创建自定义角色。我想有使用我User_Roles表动态创建这些角色。 这将使整个使用My.User.IsInRole(“MyRole”)我的应用程序的语法......类似于如何我目前能够使用My.User.Name要使用的自定义角色。不幸的是我目前可以验证对唯一的角色内置在Windows型账户(Adminisrator ...等。)。
我已经找到了大量的信息和示例有关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
解决方案
我觉得你需要实现它访问你的SQL表自定义IPrincipal对象。尝试此页。
编辑:
首先,看一下 IIdentity的和的IPrincipal 。你会注意到的IIdentity没有定义的“角色”属性。他们已经选择了实现其执行的IIdentity的(SampleIIdentity)称为角色附加属性,然后他们已经从他们实施的IPrincipal的使用它。什么我建议是,你实现你自己的角色属性(查询您现有的表),并返回一个(或阵列)可以定义自己的角色类型。然后在你执行的IPrincipal的,你可以编写IsInRole查询新的角色属性。希望这更有意义的是我,而轻薄的答案。