2017-04-07 4 views
0

ユーザーがセキュリティグループのメンバーであるかどうかを確認する関数を作成しました。現在、すべてのグループをループしますが、ユーザーのグループだけをループします。私は関数を変更しようとしましたが、タイプミスマッチエラーを与え続けます。特定のユーザーのVBAループセキュリティグループ

オブジェクト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投稿されたコードはうまく動作していると言っているが、ループを 'For Each SecGroup In ScUser.SecurityGroups 'に変更すると、タイプミスマッチが発生する。 – YowE3K

答えて

0

回答が見つかりました。下記参照。ご協力ありがとうございました。

公開機能UserHasAccess(ByValのGroupNameの)ブール

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 

エンド機能

関連する問題