我从活动目录中获取用户和组,但是经过一些测试,我们发现memberOF
与member
示例 userA 不对齐是 groupW 的成员,但 groupW 没有将 userA 列为成员。为了解决这个问题,我们必须同时让成员和成员同步它们。
public class User
{
public string UserName { get; set; }
public IList<string> MemberOf { get; set; } // list of group names
}
public class Group
{
public string Name { get; set; }
public IList<string> Members { get; set; } // list of username
}
从活动目录我得到
IEnumerable<Group> allGroups
IEnumerable<User> allUsers
我怎样才能得到三角洲?
我应该有 2 个字典或查找 ..etc
- allGroups 列出在 User.MemberOF 字典中未找到的所有组,该字典应具有作为组名和用户值列表的键。
示例 groupA 用户 {A,B,C},GroupB 用户{A,C}
- allUsers 列出在 Group.member 字典中未找到的所有用户,键应为用户名,值列表为组。
示例 userA 组{x,y},userB 组{x,z}
编辑:另一个例子:假设这是从活动目录返回的 2 个 IEnumerable。
`IEnumerable<Group> allGroups` contains
- GroupA {"Mike","Jan","David"}
- GroupB {"Kim","David","Jolan","Tim"}
// where Groupx is the name of the group and between {""} is the list of member
IEnumerable<User> allUsers contains
- Mike {"GroupA","GroupB","GroupC"}
- David {"GroupA","GroupB"}
- Jolan {"GroupB","GroupC"}
在这个例子中,我们可以看到,当我们要求 LDAP 获取 groupA 的所有成员时,“Jolan”没有被列出。但是当我们要求获取“Jolan”是成员的所有组时,我们可以看到“GroupA”已列出。与“Mike”相同,他是 GroupB 和 GroupC 的成员。GroupC 未列出。在这种情况下,“大卫”具有正确的值。
还要注意,“Tim”列在 groupB 中,虽然他不在
allUsers
结果应该是这样的
Dictionary<string,IList<string>> missingUsers;
Item 1 > key="Mike", Value={"GroupB","GroupC"}
Item 2 > Key="Jolan" , Value= {"GroupC"}
Dictionary<string,IList<string>> missingGroup;
item 1 > Key="GroupB",{"Tim"}
我希望它更清楚