6

次のコードを使用すると、指定されたユーザーが指定されたグループに存在するかどうかを簡単に確認できます。

public static bool IsInGroup(string user, string group)
{
    using (var identity = new WindowsIdentity(user))
    {
        var principal = new WindowsPrincipal(identity);
        return principal.IsInRole(group);
    }
}

ただし、次のような文字列のリストがある場合:-

User1
User2
User3
Group1
Group2
Group3

この文字列のリストをループして、各エントリがADグループであるかどうかを確認する方法はありますか?

たとえば、User3は実際にはグループ名ですが、リストを見ると、通常のADユーザーであることがわかります。

名前を解析して、ADドメインにグループとして存在するかどうかを確認する方法はありますか?

基本的に、名前とグループのリストを調べて、特定のユーザー名(たとえば、「Bob」)がリストに含まれているかどうか、またはこのリストのグループの1つに存在しているかどうかを確認したいので、エントリが上記のリストにあるのはADグループです。上記と同様の関数を実行して、ユーザーがグループ内に存在するかどうかを確認します。

4

2 に答える 2

12

悪くはないです。次のアセンブリを参照する必要があります。

System.DirectoryServices
System.DirectoryServices.Protocols
System.DirectoryServices.AccountManagement

次に、次のようなものを使用できます。

var groupName = "developers";

using (var context = new PrincipalContext(ContextType.Domain))
{
    var groupPrincipal = GroupPrincipal.FindByIdentity(context, groupName);
}

PrincipalContextコンストラクターを変更して、ローカルマシンにContextType.Machineを使用できます。必要に応じて、ドメイン名を2番目のパラメーターとして追加できますが、ローカルドメインの場合はそれを取得する必要があります。

[編集]また、FindByIdentityメソッドは、一致しない場合はnullを返します。また、ディレクトリサービスからメンバーユーザーやその他の有用な情報を取得できます。

于 2013-01-29T19:48:55.173 に答える
1

このリンクをチェックしてください。基本的にグループをロールに変換し、標準のメンバーシッププロバイダー機能を使用して使用できます。

http://slalomdev.blogspot.com/2008/08/active-directory-role-provider.html

于 2013-01-29T19:46:36.933 に答える