Option Compare Database
Option Explicit
Function UserBelongsToGroupDB(strGroupName As String, _
Optional varUserName As Variant, _
Optional varDbName As Variant) As Boolean
Dim rst As New ADODB.Recordset
Dim bolMOG As Boolean
Dim strSQL As String
Dim strUserName As String
Dim strDbName As String
On Error GoTo ErrHandler
If (IsMissing(varUserName)) Then strUserName = CurrentUser Else strUserName = varUserName
If (IsMissing(varDbName)) Then strDbName = SysCmd(acSysCmdGetWorkgroupFile) Else strDbName = varDbName
'****************************************************************************************************************************************
'* user is trying to determine if the user's name and SID of currentdatabase is equal to the user's name and SID of strDBName *
'****************************************************************************************************************************************
If (strDbName = SysCmd(acSysCmdGetWorkgroupFile)) Then
strSQL = "SELECT Count(*) AS IsMemberOfGroup FROM (MSysAccounts AS MSA INNER JOIN MSysGroups AS MSG ON MSA.SID = MSG.GroupSID) INNER JOIN MSysAccounts AS MSA1 ON MSG.UserSID = MSA1.SID IN '" & strDbName & "' "
strSQL = strSQL & "WHERE (((MSA1.Name)='" & strUserName & "') AND ((MSA.Name)='" & strGroupName & "') AND ((MSA.FGroup)<>0) AND ((MSA1.FGroup)=0));" '));"
Else
strSQL = "SELECT Count(*) AS IsMemberOfGroup FROM (MSysAccounts AS MSA INNER JOIN MSysGroups AS MSG ON MSA.SID = MSG.GroupSID) INNER JOIN MSysAccounts AS MSA1 ON MSG.UserSID = MSA1.SID IN '" & SysCmd(acSysCmdGetWorkgroupFile) & "' "
strSQL = strSQL & "WHERE (((MSA1.Name)='" & strUserName & "') AND ((MSA.Name)='" & strGroupName & "') AND ((MSA.FGroup)<>0) AND ((MSA1.FGroup)=0) AND (([MSA1].[Name] & MSA1.SID)=(SELECT MSA1.Name & MSA1.SID as UniqueID "
strSQL = strSQL & "FROM (MSysAccounts AS MSA INNER JOIN MSysGroups AS MSG ON MSA.SID = MSG.GroupSID) INNER JOIN MSysAccounts AS MSA1 ON MSG.UserSID = MSA1.SID IN '" & strDbName & "' "
strSQL = strSQL & "WHERE (((MSA1.Name)='" & strUserName & "') AND ((MSA.Name)='" & strGroupName & "') AND ((MSA.FGroup)<>0) AND ((MSA1.FGroup)=0));" ' )));"
End If
On Error Resume Next
rst.Open strSQL, CurrentProject.Connection, adOpenStatic, adLockReadOnly
If (Err.number <> 0) Then
Err.Clear
bolMOG = False
Else
bolMOG = rst.Fields("IsMemberOfGroup").Value
rst.Close
Set rst = Nothing
End If
UserBelongsToGroupDB = bolMOG
ExitProcedure:
Exit Function
ErrHandler:
Err.Raise Err.number, "UserBelongsToGroupDB", Err.Description
Resume ExitProcedure
End Function