Frage

Wie kann ich feststellen, ob ein Benutzer, in etwa Zugang, ein Mitglied einer Active Directory Security Group ist?

Ich mag lieber nicht ein ganzes Authentifizierungssystem in meine kleinen Zugang DB bauen.

Danke

War es hilfreich?

Lösung

Allain gefunden diesem 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

können Sie die Windows erhalten Kontoinformationen über die USERDOMAIN und USERNAME Umgebung Vars:

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

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

Dass sie alle zusammen:

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

Andere Tipps

Ich bin auf das Spiel mit diesem spät, aber der Code, den Sie unter müssen. Es wird Benutzernamen und Domainnamen für Sie.

Beachten Sie, dass ich verwende objGroup.Ismember nicht - das ist eigentlich die richtige Methode zu verwenden. - Ich bin die Liste der Gruppen aufzählt, die der Benutzer in ist, weil es viel einfacher zu debuggen ist und es gibt keine nennenswerte Leistungseinbuße

... Und ich hob den Code aus einem früheren Projekt, bei dem ich brauchte die Mitgliedschaft in einer ‚Read Berichte‘ Gruppe zu überprüfen, ein ‚Daten bearbeiten‘ Gruppe, und ein ‚Edit System Daten‘ Gruppe, so dass ich könnte entscheiden, welche und die damit steuert bildet schreibgeschützt zu öffnen. Aufzählen von Gruppen einmal war schneller als drei separate Kontrollen.

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

Hoffentlich verspätete Vorlage ist von Nutzen für andere Entwickler: wenn ich das zum ersten Mal im Jahr 2003 nachgeschlagen, zurück, es war wie niemand jemals AD-Gruppen in Excel oder MS-Access benutzt hatte,

.

diese 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

Nun, ich brauche nur die Kontonamen des aktuellen Benutzers. Schade Application.CurrentUser mir nicht geben, ihren Domain-Kontonamen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top