3

ユーザー名を指定して、ユーザーがメンバーであるすべてのグループを返す LDAP クエリを作成するにはどうすればよいですか?

4

2 に答える 2

4

.NET 3.5 を使用していますか??

もしそうなら、.NET Framework 3.5でのユーザーとグループの管理の新機能を紹介しているこの優れた MSDN の記事「 Managing Directory Security Principals in the .NET Framework 3.5 」をチェックしてください。

この場合、プリンシパル コンテキスト (ドメインなど) が必要です。

PrincipalContext domainContext = 
   new PrincipalContext(ContextType.Domain, "YourDomain");

そして、あなたは非常に簡単にユーザーを見つけることができます:

UserPrincipal user = UserPrincipal.FindByIdentity(principalContext, "username");

また、「UserPrincipal」オブジェクトには、ユーザーがメンバーであるすべてのグループを返す「GetAuthorizationGroups」というメソッドがあります。

PrincipalSearchResult<Principal> results = user.GetAuthorizationGroups();

// display the names of the groups to which the
// user belongs

foreach (Principal result in results)
{
    Console.WriteLine("name: {0}", result.Name);
}

簡単ですね。

3.5 より前の .NET、または他の言語 (PHP、Delphi など) からの「ストレートな」LDAP では、より多くの作業が必要です。

マルク

于 2009-09-04T18:35:28.463 に答える
1

グループ情報を取得する別の方法は次のとおりです。

System.DirectoryServicesの参照を必ず追加してください。

DirectoryEntry root = new DirectoryEntry("LDAP://OU=YourOrganizationOU,DC=foo,DC=bar");

DirectoryEntry user = GetObjectBySAM("SomeUserName", root);

if (user != null)
{
  foreach (string g in GetMemberOf(user))
  {
    Console.WriteLine(g);
  }
}

次のメソッドは、ユーザーエントリを取得し、ユーザーがメンバーになっているグループである文字列のリストを返します。

public List<string> GetMemberOf(DirectoryEntry de)
{
  List<string> memberof = new List<string>();

  foreach (object oMember in de.Properties["memberOf"])
  {
    memberof.Add(oMember.ToString());
  }

  return memberof;
}

public DirectoryEntry GetObjectBySAM(string sam, DirectoryEntry root)
{
  using (DirectorySearcher searcher = new DirectorySearcher(root, string.Format("(sAMAccountName={0})", sam)))
  {
    SearchResult sr = searcher.FindOne();

    if (!(sr == null)) return sr.GetDirectoryEntry();
    else
      return null;
  }
}
于 2010-11-30T19:36:34.077 に答える