【发布时间】:2016-12-20 20:45:56
【问题描述】:
大家好,我在从递归函数调用中获取正确结果时遇到了麻烦
这就是我所拥有的
public IEnumerable<AdProfileDto> GetAdProfilesByGroup(string groupDisplayName)
{
if (!string.IsNullOrEmpty(groupDisplayName))
{
IList<AdProfileDto> adProfiles = null;
/// start AD query
using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry(AdHelper.path)))
{
/// configure searcher for group
/// https://msdn.microsoft.com/en-us/library/aa746475(v=vs.85).aspx
searcher.Filter = string.Format("(&((|(&(objectclass=user)(objectcategory=person))(objectcategory=group)))(cn={0}))", AdHelper.ReplaceSpecialChars(groupDisplayName)); //--> exact search
searcher.PropertiesToLoad.AddRange(new[] { AdHelper.member, AdHelper.category, AdHelper.displayName, AdHelper.accountName });
searcher.SearchScope = SearchScope.Subtree;
SearchResult result = searcher.FindOne();
if (result != null) //--> check if there are any results
{
if (AdHelper.IsGroup((string)result.Properties[AdHelper.category][0])) //--> check if result is a group
{
ResultPropertyValueCollection propertyValues = result.Properties[AdHelper.member]; //--> get all members for this group : users / groups / both
//for (int index = 0; index < propertyValues.Count; ++index)
//{
return GetAdProfilesByGroup(AdHelper.GetPropertyCN((string)propertyValues[0])); //--> recursive check each member: user | group, extract displayName first
//}
}
else
{
//return GetAdProfilesByCN((string)result.Properties[AdHelper.displayName][0], 1);
adProfiles = new List<AdProfileDto>(); //--> initialize list
adProfiles.Add(GetAdProfilesByCN((string)result.Properties[AdHelper.displayName][0], 1).FirstOrDefault());
}
}
return adProfiles;
}
}
return null;
}
我的想法是我从活动目录中获取一些数据,我有 2 组我感兴趣:组和用户。一个组可以有其他组和/或用户。最终结果应该是特定组及其子组(如果有)的用户列表
例如:
GroupeA : user1, user2 => 两者都返回
GroupeB : groupZ, user1 => 结果将是 user1, user3, user4, user5
|
-> user 3, user 4, groupT
|
-> user 5
有什么帮助吗? 谢谢。
附:目前我只得到一个结果:在检查具有用户和组(其他用户和子组)的组之后,迭代看起来像:
Groupe1 : GroupeA, GroupeB, GroupeC, User1 , User2 ... UserN
GroupeA:UserA1、UserA2 .. UserAN(仅限)
返回 UserA1 并且函数结束它不会迭代 GroupA 的其余用户,也不会在 GroupeB 级别的调用结束后恢复函数
【问题讨论】:
-
java、c#、c++和.net怎么了。那里只显示其中一个。 -
是的,对不起,我想这个概念应该是一样的。
-
标签应该与问题的内容直接相关,通常有专门针对递归等概念的标签。