I am quite new to SharePoint, what I am trying to do is resolveing everything into users (sp group, User, AD group, Distribution List etc.) I am using the SPUtility method "GetPrincipalsInGroup" which works o to some extent but this method does not really reutrn me every user (as I am in Domain DE I can see the users in Germany but there is a users from US which I cannot see in my results it misses in the results: Please suggest how I can get over this issue: Below is the code I am doing:
SPRoleAssignmentCollection roleassignment = e.Web.RoleAssignments;
foreach (SPRoleAssignment siterole in roleassignment)
{
SPPrincipal principal = siterole.Member;
List<SPUser> user = new List<SPUser>();
ResolveGroup(e.Web, principal, user);
}
private void ResolveGroup(SPWeb web, SPPrincipal principal, List<SPUser> users)
{
if (principal.GetType() == typeof(SPUser))
{
SPUser user = principal as SPUser;
if (!user.IsDomainGroup)
{
users.Add(user);
}
else
{
SPPrincipalInfo[] groupMembers = SPUtility.GetPrincipalsInGroup(web, principal.LoginName, int.MaxValue - 1, out bool reachedMaxCount);
if (groupMembers == null) return;
foreach (SPPrincipalInfo member in groupMembers)
{
switch (member.PrincipalType)
{
case SPPrincipalType.SecurityGroup:
{
ResolveGroup(web, web.EnsureUser(member.LoginName), users);
break;
}
case SPPrincipalType.DistributionList:
{
ResolveGroup(web, web.EnsureUser(member.LoginName), users);
break;
}
case SPPrincipalType.SharePointGroup:
{
ResolveGroup(web, web.Groups[member.LoginName], users);
break;
}
case SPPrincipalType.User:
{
try { users.Add(web.EnsureUser(member.LoginName)); }
catch (Exception) { }//build proper error handling!
break;
}
default:
{
break;
}
}
}
}
}
else
{
SPGroup group = principal as SPGroup;
foreach (SPUser groupUser in group.Users)
{
ResolveGroup(web, groupUser, users);
}
}
}
SPPrincipalInfo[] groupMembers : Shows the users less than actually they are more thanks in advance, Mirza