使用Graph API加载两个Azure Active Directory组中的用户列表

时间:2014-08-21 08:01:09

标签: c# asp.net-mvc azure azure-active-directory

我对Active Directory和Azure都非常陌生,从我的问题中可能很明显。我使用MVC Directory Graph Sample作为参考。我能够完成我正在尝试的大部分事情,但我遇到了一个问题:

我在Azure Active Directory中有一个组和用户的层次结构,其中我有两个级别的组(例如,GroupA包含GroupB和GroupC,GroupD包含GroupE ...)。理论上,用户可以是这些组的任意组合(例如GroupA,GroupD和GroupE)。

我将两个字符串传递给我的MVC项目控制器,其中每个字符串都是我的Azure Active Directory中的一个组的ID。我只想加载两个组中重叠的用户对象,即只加载两个组中的用户。

继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>

1 个答案:

答案 0 :(得分:0)

不,目前没有办法做这个服务器端,如果那就是你要找的。