2011-07-26 3 views
2

以下のコードを使用して、特定のユーザーがADの配布グループの一部であるかどうかを確認しています。ユーザーがADの配布リスト/セキュリティグループのメンバであるかどうかを確認する方法C#

static bool IsUserMemberOf(string userName, string groupName) 
{ 
    using (var ctx = new PrincipalContext(ContextType.Domain)) 
    using (var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 
    using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
    { 
    return userPrincipal.IsMemberOf(groupPrincipal); 
    } 
} 

私はIsUserMemberOf("domain\\username","domain\\groupname") などの値をメソッドの上に呼び出しています。しかしgroupPrincipalがnull値を持つているので、私は、nullポインタ例外を参照してください。

この点に関するお手伝いはありますか?

+1

あなたのコードは私のシステム上で動作します。ドメイン\\ groupnameは使用しているコンテキスト内の有効なグループですか? 'ctx.ConnectedServer'を調べて、接続が期待されるドメインに接続していることを確認する価値があります。また、コードが失敗したかどうかを確認するためだけに、別のグループ名を使用してみることもできます。 'userPrincipal.GetGroups()'関数はあなたが使用できる名前のリストを提供します。 –

+0

私もあなたのコードを試して、それは私のためにも動作します。ユーザー名とグループ名からドメイン\\部分を省略しました。 –

+0

また、ユーザーがグループと同じドメインにいない可能性はありますか?その場合、あなたの方法は機能しません。残念ながら、私はこの問題に対する解決策はありません。私も同様の問題を抱えており、十分な答えを見つけることはできませんでした。実際に上記のコード – RLH

答えて

0

実際に私のグループは、私が照会しているユーザーとは異なるドメインに属しています: 私のプログラムは以下のように変更しました。

は、私は次のように呼び出しています:

IsUserMemberOf("domain1\\username","domain2\\groupname") 


static bool IsUserMemberOf(string userName, string groupName) 
{ 
using (var ctx = new PrincipalContext(ContextType.Domain,"domain1")) 
using (var groupPrincipal = GroupPrincipal.FindByIdentity(new PrincipalContext(ContextType.Domain,"domain2"), groupName)) 
using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, userName)) 
{ 
    return userPrincipal.IsMemberOf(groupPrincipal); 
} 

}

1

それだけであることを意味しています:あなたのグループがドメインに存在していないので、

groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName)) 

はNULLポインタを返します。 var ctxuserPrincipalgroupPrincipalをテストするだけです。