Quantcast
Channel: CHUVASH.eu » extension
Viewing all articles
Browse latest Browse all 5

Check if user is in group

$
0
0

Use LINQ to check if user is in a group. Create an extension method.

public static bool InGroup(this SPUser user, SPGroup group)
{
  return user.Groups.Cast<SPGroup>()
    .Any(g => g.ID == group.ID);
}

EDIT 2011-01-22: There is a shortcoming of this method. You won’t get a user which is in group through a AD group. You’ll get only users and ad groups. But there is another method to check if a user is inside an AD group.

How could we combine them?…

I think we must start from group this time, not from user:

public static bool HasUser(this SPGroup user, SPUser user)
{
	var users = group.Users.Cast();
	var samAccount = Regex.Replace(user.LoginName, @".*\\(.*)", "$1", RegexOptions.None);
	var exists = users.Any(u => u.LoginName.Equals(user.LoginName));
	if (!exists)
	{
		var ctx = new PrincipalContext(ContextType.Domain);
		foreach (var u in users)
		{
			var login = u.LoginName;
			var groupName = Regex.Replace(login, @".*\\(.*)", "$1", RegexOptions.None);
			var grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, groupName);
			if (grp == null) continue;
			var principals = grp.GetMembers(true);
			exists = principals.Any(p => p.SamAccountName.Equals(samAccount, 
						StringComparison.InvariantCultureIgnoreCase));
			if (exists) break;
		}
	}
	return exists;
}

Using Regex to get the samAccount from loginname is taken from the awesome answer on StackOverflow.



Viewing all articles
Browse latest Browse all 5

Trending Articles