vendredi 13 décembre 2013

SharePoint 2010 / 2013 Get all groups for SPUser including active directory group

SharePoint don't give you groups for SPUser if the right is given by an active directory group.

You have to merge groups specificied directly using user login in sharepoint groups and active directory groups.


private static List<SPGroup> GetAllUserGroups(SPUser user)
{
    List<SPGroup> groups = new List<SPGroup>();
    //Get groups from SharePoint
    foreach (SPGroup spGroup in user.Groups)
    {
        groups.Add(spGroup);
    }
    string userLogin = user.LoginName;
    SPSecurity.RunWithElevatedPrivileges(delegate(){ 
      SPSite siteC = SPContext.Current.Site;   
      SPWeb webC = SPContext.Current.Web;  
      using (SPSite site = new SPSite(siteC.ID)) {
      using (SPWeb web = site.OpenWeb(webC.ID))
      {
          foreach (SPGroup spGroupW in web.Groups)
          {
             foreach (SPUser use in spGroupW.Users)
             {
                 try
                 {
                    if (use.IsDomainGroup) 
//Getting domain group and test if user belong to it.
                    {
                        int limit = 100;
                        bool reachedMaxCount;
                        string groupD2 = use.LoginName;
                        SPPrincipalInfo[] users = SPUtility.GetPrincipalsInGroup(
                        web, groupD2, limit, out reachedMaxCount);
                       if (users != null && users.Any(o => o.LoginName.Equals(userLogin)) && !groups.Contains(spGroupW)) 
//Test with linq if user belong to the group and if the group is not alread added
                       {
                           groups.Add(spGroupW);
                       }
                     }
                    }
                    catch{}
                    }
                    }
                }}
    });
   return groups;
}

Aucun commentaire :

Enregistrer un commentaire