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](/2012/01/16/check-if-a-user-is-in-a-ou/ "See my post about how to retrieve users from AD groups with PrincipalSearcher"). 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;
}