11

そこで、ActiveDirectory内の再帰グループについて質問があります。ユーザーIDがグループに含まれているかどうかを確認する小さなメソッドがあります。よく働く。今日、再帰的なグループメンバーシップをチェックしていないことがわかりました。その方法があるかどうか、またはその方法があるかどうかはわかりません。これが私がこれまでに非再帰的に持っているものです:

public static bool CheckGroupMembership(string userID, string groupName, string Domain)
{
  bool isMember = false;

  PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain, Domain);
  UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID);

  if (user.IsMemberOf(ADDomain, IdentityType.Name, groupName.Trim()))
  {
    isMember = true;
  }

  return isMember;
}

ディレクトリサーチャーなどについていくつか見たことがありますが、ADを直接操作するのは少し新しいので、概念は理解していますが、他のいくつかのことはまだ少し失われています。

ありがとう!

4

2 に答える 2

31

の再帰オプションを使用して確認することもできますGroupPrincipal.GetMembers

public static bool CheckGroupMembership(string userID, string groupName, string Domain) {
    bool isMember = false;

    PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain, Domain);
    UserPrincipal user = UserPrincipal.FindByIdentity(ADDomain, userID);
    GroupPrincipal group = GroupPrincipal.FindByIdentity(ADDomain, groupName);

    if ((user != null) && (group != null)) {
        isMember = group.GetMembers(true).Contains(user);
    }

    return isMember;
}
于 2014-12-11T12:41:47.377 に答える
15

これは、 System.DirectoryServices.AccountManagement名前空間を使用したソリューションです。これは一種の再帰的ソリューションです。C#を使用した再帰グループメンバーシップの検索(Active Directory)では、配布グループでも機能する再帰ソリューションを提供します。

/* Retreiving a principal context
 */
Console.WriteLine("Retreiving a principal context");
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "WM2008R2ENT:389", "dc=dom,dc=fr", "jpb", "PWD");


/* Look for all the groups a user belongs to
 */
UserPrincipal aUser = UserPrincipal.FindByIdentity(domainContext, "user1");
PrincipalSearchResult<Principal> a =  aUser.GetAuthorizationGroups();

foreach (GroupPrincipal gTmp in a)
{
  Console.WriteLine(gTmp.Name);    
}
于 2012-04-14T04:57:38.117 に答える