2017-04-07 30 views
0

我已经构建了一个函数来检查用户是否是安全组的成员。目前它循环所有的组,但我希望它只循环用户的组。我试图改变功能,但它不断给我一个类型不匹配的错误。VBA - 特定用户的循环安全组

有一个SecurityGroups属性为对象ScUser。当我在For Each循环中使用它时,它会给我一个类型不匹配错误。 对于ScUser.SecurityGroups中的每个SecGroup

下面的代码正常工作。你将如何修改它,因此它只循环用户的组?

Public Function UserHasAccess(SGroup As String) As Boolean 

    Dim ScUser As CUser 
    Dim SecGroup As CSecurityGroup 
    Dim SecGroups As CSecurityGroups 

    Set ScUser = New CUser 
    ScUser.Init SessionContext 
    ScUser.Load SessionContext.CurrentUserID 

    Set SecGroups = New CSecurityGroups 
    SecGroups.Init SessionContext 

    For Each SecGroup In SecGroups 

     Debug.Print SecGroup.Fields(SecurityGroup_fld_NAME) 

     If SecGroup.Fields(SecurityGroup_fld_NAME) = SGroup Then 
      UserHasAccessNEW = True 
      Exit Function 
     End If 

    Next 

End Function 
+0

“工作正常” 和 “引发类型不匹配错误” 是相当矛盾的。介意澄清? –

+0

它工作正常,但它循环所有的安全组。我只想让它循环一个特定用户的安全组。 – SQLiz

+1

@ Mat'sMug我认为OP是说发布的代码工作正常,但将循环更改为“For Sccser.SecurityGroups中的每个SecGroup”会导致类型不匹配。 – YowE3K

回答

0

我找到了答案。见下文。感谢您的帮助。

公共功能UserHasAccess(BYVAL组名)为布尔

Dim oGroups As CSecurityGroups 
Dim oGroup As CSecurityGroup 
Dim oSecUser As CSecurityUser 

Set oGroups = New CSecurityGroups 
oGroups.Init REApplication.SessionContext 

For Each oGroup In oGroups 

    If oGroup.Fields(SecurityGroup_fld_NAME) = GroupName Then 

     For Each oSecUser In oGroup.SecurityUsers 

      If Trim(oSecUser.Fields(SecurityUser_fld_USERS_ID)) = Trim(REApplication.SessionContext.CurrentUserID) Then 
       UserHasAccess = True 
      End If 

     Next oSecUser 

    End If 

    oGroup.Closedown 

Next oGroup 

oGroups.Closedown 
Set oGroups = Nothing 
Set oGroup = Nothing 
Set oSecUser = Nothing 

端功能