IsInRole - VB表单加载

时间:2015-04-23 14:29:43

标签: vb.net active-directory isinrole

我使用登录屏幕和表单从Visual Basic构建了一个应用程序。登录屏幕使用Active Directory进行身份验证。用户身份验证后,表单加载。在表单加载时,我想检查经过身份验证的用户是否在四个特定的Active Directory安全组之一。根据经过身份验证的用户所在的组,将取决于表单上的哪些按钮已启用。我有活动目录用户身份验证用于登录程序和加载表单,但用于验证用户所在组的特定代码不起作用。下面是我的表单加载代码。

LinkedList

无论经过身份验证的用户位于哪个组中,都会启用所有按钮以供使用。我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试这种方法。在您的情况下,我会在用户进行身份验证时缓存用户所属的组数组,然后在您的应用中随时查看。

   Function IsInGroup(UserName As String, groupName As String) As Boolean
      Dim vUsuario As New NTAccount(UserName)
      Dim sid As SecurityIdentifier = vUsuario.Translate(GetType(SecurityIdentifier))
      Using vRootDSE As New DirectoryEntry("LDAP://rootDSE")
         Using vSearcher As New DirectorySearcher(New DirectoryEntry("LDAP://" + CStr(vRootDSE.Properties("defaultNamingContext")(0))), "(objectSID=" & sid.ToString() & ")", New String() {"memberOf"}, SearchScope.Subtree)
            Dim src As SearchResultCollection = vSearcher.FindAll()

            Dim memberOf As ResultPropertyValueCollection = src(0).Properties("memberOf")
            For i As Integer = 0 To memberOf.Count - 1
               'Debug.Print(memberOf(i).ToString())

               ' I don't really like this approach, but it's quick to write ;)
               If memberOf(i).ToString().Contains("=" & groupName & ",") Then
                  Return True
               End If
            Next

         End Using

      End Using

      Return False
   End Function