Bestimmen einer Gruppenmitgliedschaft des Benutzers mit VBA
-
03-07-2019 - |
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
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,
.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.