2014-10-20 58 views
-1

在分享点解决方案中,我需要从AD组获得所有用户,目前AD组可以有30个用户,但将来我们可以替换AD一个拥有1000个用户的组。并且因为每个用户在每个请求(其导航组件显示/隐藏OneDrive链接)上都执行此代码,所以我需要它尽可能高效。如何知道用户是否在AD组中有效存在

// Get all users from a group recursively. 
         var context = new System.DirectoryServices.AccountManagement.PrincipalContext(ContextType.Domain); 
         GroupPrincipal group = new GroupPrincipal(context ,farm.Properties[GlobalNavigationConstants.Keys.GlobalNavigationOneDriveADGroup].ToString()); 
         PrincipalSearchResult<Principal> members = group.GetMembers(true); 
         var list = members.OfType<UserPrincipal>().ToList(); 

         //Get current user 
         var loginName = SPContext.Current.Web.CurrentUser.LoginName; 

         //How to check if loginname is on list efficiently? 

我该如何尽可能快地做到这一点?

回答

0

警告,未测试。

var context = new System.DirectoryServices.AccountManagement.PrincipalContext(ContextType.Domain); 
GroupPrincipal group = new GroupPrincipal(context, 
    farm.Properties[GlobalNavigationConstants.Keys.GlobalNavigationOneDriveADGroup].ToString()); 

UserPrincipal usr = UserPrincipal.FindByIdentity(context, 
              IdentityType.Sid, 
              SPContext.Current.Web.CurrentUser.Sid); 

var found = usr.IsMemberOf(group); 
相关问题