[Vba] تحديد عضوية مجموعة مستخدم باستخدام فبا



Answers

أنا متأخر في المباراة مع هذا، ولكن التعليمات البرمجية التي تحتاج إليها أدناه. فإنه يحصل على أسماء المستخدمين وأسماء النطاقات بالنسبة لك.

لاحظ أن أنا لا تستخدم 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، كان مثل أي شخص لم تستخدم أي وقت مضى مجموعات أد في إكسيل أو مس-أسيس.

Question

كيف يمكنني تحديد ما إذا كان أحد المستخدمين في أسيس أسيس عضو في "مجموعة أمان أكتيف ديركتوري"؟

أنا أفضل بدلا من بناء نظام مصادقة كاملة في بلدي قليلا الوصول دب.

شكر




Links