2014-10-20 8 views
-1

В решении sharepoint мне нужно, чтобы все пользователи из группы AD, пока эта группа AD может иметь 30 пользователей, но в будущем мы могли бы заменить AD группа с одним, у которого 1000 пользователей. и потому, что этот код выполняется для каждого пользователя по каждому запросу (его компонент навигации для отображения/скрытия OneDrive Link), тогда мне нужно, чтобы он был максимально эффективным.Как узнать, действительно ли пользователь существует в AD Group

// 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);