vba - تحديد عضوية مجموعة مستخدم باستخدام فبا





security ms-access access-vba (4)


وجدت هذا على الانترنت

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 لا تعطيني اسم حساب المجال الخاص بهم.

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

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

شكر




ألين وجدت هذا على الانترنت

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

يمكنك الحصول على معلومات حساب ويندوز عن طريق USERDOMAIN و USERDOMAIN البيئة فار:

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



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

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




عند استخدام ASP classic (البرمجة النصية من جانب الخادم) ، يتم استيرادها لتعيين كل الكائنات إلى أي شيء عندما تمر بها ، لأنها لا تخرج من النطاق حتى يتم إيقاف تشغيل الملقم [الظاهري].

لهذا السبب ، تعرض جميع أمثلة البرمجة النصية لـ MS VB دائمًا الكائنات التي يتم إغلاقها ويتم تعيينها إلى لا شيء. بحيث يمكن استخدام مقتطفات النص البرمجي في بيئات مثل ASP الكلاسيكية حيث لا تخرج الكائنات من النطاق.

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

إذا وجدت نفسك ترميز ASP كلاسيكي ، أو تشغيل عمليات في نطاق عالمي لسبب آخر ، ثم نعم ، يجب عليك تحرير الكائنات بشكل صريح.





vba security ms-access access-vba