我对Active Directory和Azure非常陌生,从我的问题中可以明显看出这一点。我使用MVC目录图样本作为参考。我能够做我正在尝试的大部分事情,但我遇到了一个问题:
我在Azure Active Directory中有一个组和用户的层次结构,其中我有两个级别的组(例如GroupA包含GroupB和GroupC, GroupD包含GroupE…)。从理论上讲,用户可以在这些组的任意组合中(例如GroupA、GroupD和GroupE)。
我传递两个字符串到我的MVC项目控制器,其中每个字符串是在我的Azure活动目录组的ID。我想只加载在两个组中重叠的User对象,即只加载在两个组中的Users。
通过MSDN中的一个示例项目,我可以加载其中一个组中的所有用户列表,如下所示:
Group groupA = DirectoryService.groups.Where(it => (it.objectId == GroupAId)).SingleOrDefault();
DirectoryService.LoadProperty(groupA , "members");
List<User> usersListA = groupA.members.OfType<User>().ToList();
对第二个列表重复此操作,然后我可以将两者相交:
Group groupB = DirectoryService.groups.Where(it => (it.objectId == GroupBId)).SingleOrDefault();
DirectoryService.LoadProperty(groupB , "members");
List<User> usersListB = groupA.members.OfType<User>().ToList();
List<User> finalList = usersListA.Intersect(usersListB);
基本上,我完全加载了两个列表…我的问题是,有没有更好的方法?
例如,在我从GroupA加载了用户列表之后,是否有一种方法可以过滤列表以只包含属于GroupB的用户?类似以下语句:
//<Incorrect syntax>
List<User> finalList = groupA.Where(user => user.memberOf("GroupB"));
//</Incorrect syntax>
不,目前没有办法在服务器端做到这一点,如果这是你正在寻找的