2009-01-06 63 views

回答

8

阿兰发现this online

Function IsMember(strDomain As String, strGroup _ 
    As String, strMember As String) As Boolean 
    Dim grp As Object 
    Dim strPath As String 

    strPath = "WinNT://" & strDomain & "/" 
    Set grp = GetObject(strPath & strGroup & ",group") 
    IsMember = grp.IsMember(strPath & strMember) 
End Function 

你可以通过USERDOMAINUSERNAME环境的方式获得的Windows帐户信息瓦尔:

Function GetCurrentUser() As String 
    GetCurrentUser = Environ("USERNAME") 
End Function 

Function GetCurrentDomain() As String 
    GetCurrentDomain = Environ("USERDOMAIN") 
End Function 

全部放在一起:

If IsMember(GetCurrentDomain, "AD Group", GetCurrentUser) Then 
    DoStuff() 
End If 
+0

真。这主要是为了向不同的用户显示不同的屏幕。没有那么多的可用性安全。 – 2009-01-06 15:54:35

2

找到this online

Function IsMember(strDomain As String, strGroup _ 
    As String, strMember As String) As Boolean 
    Dim grp As Object 
    Dim strPath As String 

    strPath = "WinNT://" & strDomain & "/" 
    Set grp = GetObject(strPath & strGroup & ",group") 
    IsMember = grp.IsMember(strPath & strMember) 
End Function 

现在,我只需要当前用户的帐户名。太糟糕了Application.CurrentUser不给我他们的域帐户名。

+0

只是一句警告。此代码将返回用户主要组(通常为“域用户”)的错误结果,因为它在AD中以不同的方式存储。 – JohnFx 2009-01-06 15:36:23

+0

没问题。我在12月底一直在为这个问题奋斗了几个星期,并且以艰难的方式学习了这个问题。 我强烈建议更换一书,为这个类型的问题:“在.NET开发人员指南目录服务编程” – JohnFx 2009-01-06 20:53:35

7

我迟到了,但是你需要的代码如下。它会为您获取用户名和域名。

请注意,我没有使用objGroup.Ismember - 这实际上是正确的使用方法 - 我列举了用户所在的组列表,因为它更容易调试,并且没有可观的性能损失。

......我抬起从早期的一个项目,在我需要检查了“阅读的报告”团,“编辑数据”组成员的代码,以及“编辑系统数据”组,使我可以选择启用哪些控件以及哪些表单以只读方式打开。枚举组一次比三次单独检查快。

Public Function UserIsInGroup(GroupName As String, _ 
           Optional Username As String, _ 
           Optional Domain As String) As Boolean 
'On Error Resume Next 

' Returns TRUE if the user is in the named NT Group. 

' If user name is omitted, current logged-in user's login name is assumed. 
' If domain is omitted, current logged-in user's domain is assumed. 
' User name can be submitted in the form 'myDomain/MyName' 
'          (this will run slightly faster) 
' Does not raise errors for unknown user. 
' 
' Sample Usage: UserIsInGroup("Domain Users") 

Dim strUsername As String 
Dim objGroup As Object 
Dim objUser  As Object 
Dim objNetwork As Object 

UserIsInGroup = False 

If Username = "" Then 
    Set objNetwork = CreateObject("WScript.Network") 
    strUsername = objNetwork.UserDomain & "/" & objNetwork.Username 
Else 
    strUsername = Username 
End If 

strUsername = Replace(strUsername, "\", "/") 
If InStr(strUsername, "/") Then 
    ' No action: Domain has already been supplied in the user name 
Else  
    If Domain = "" Then 
     Set objNetwork = CreateObject("WScript.Network") 
     Domain = objNetwork.UserDomain 
    End If   
    strUsername = Domain & "/" & strUsername   
End If 

Set objUser = GetObject("WinNT://" & strUsername & ",user")  
If objUser Is Nothing Then  
    ' Insert error-handler here if you want to report an unknown user name 
Else 
    For Each objGroup In objUser.Groups 
     'Debug.Print objGroup.Name 
     If GroupName = objGroup.Name Then 
      UserIsInGroup = True 
      Exit For 
     End If 
    Next objGroup 
End If 

Set objNetwork = Nothing 
Set objGroup = Nothing 
Set objUser = Nothing 

End Function 

希望这迟交是使用于其他开发商的:当我在2003年看这件事的第一次,回来了,就好像从来没有人使用AD组Excel或MS-Access。

相关问题