I understand that a good way to check if an user is in a role is:
if (User.IsInRole(\"Admin\"))
{
}
However How can I check if my user is
I used the below code. In my case, I had a semi colon de-limited string as the parameter which is read from web.config. You may change the below code easily if you are passing a List.
public class ActiveDirectoryGroup
{
public static bool IsInAnyRole(string adRoles)
{
return adRoles.Split(Convert.ToChar(";")).Any(role => !string.IsNullOrEmpty(role.Trim()) && HttpContext.Current.User.IsInRole(role.Trim()));
//If list is passed use below
//return listParameter.Any(role => !string.IsNullOrEmpty(role.Trim()) && HttpContext.Current.User.IsInRole(role.Trim()));
}
}
In web.config:
<appSettings>
<add key="ADGroup" value="Domain\Admin;Domain\Supervisor;Domain\Manager;" />
</appSettings>
I used it like below in my page load:
if (ActiveDirectoryGroup.IsInAnyRole(ConfigurationManager.AppSettings["ADGroup"]))
{
//do something
}
EDIT: Without coding each role, do it a LINQ extension method, like so:
private static bool IsInAnyRole(this IPrincipal user, List<string> roles)
{
var userRoles = Roles.GetRolesForUser(user.Identity.Name);
return userRoles.Any(u => roles.Contains(u));
}
For usage, do:
var roles = new List<string> { "Admin", "Author", "Super" };
if (user.IsInAnyRole(roles))
{
//do something
}
Or without the extension method:
var roles = new List<string> { "Admin", "Author", "Super" };
var userRoles = Roles.GetRolesForUser(User.Identity.Name);
if (userRoles.Any(u => roles.Contains(u))
{
//do something
}
What about this?
if (User.Roles.Count() != 0)
{
//User is not in any role
}else
{
//User is in at least one role
}
In my case i just have one role per user. So i did it like this:
if (User.Roles.FirstOrDefault().RoleId == "7b433246-5881-4ace-bbaa-e5514191171c") {
//Do something
}
There's no built-in way to check if a user is in multiple roles, but it's pretty trivial to create a nice extension method to handle it for you:
public static bool IsInAnyRole(this IPrincipal principal, params string[] roles)
{
return roles.Any(principal.IsInRole);
}
Usage then is:
if (User.IsInAnyRole("Admin", "Author", "SuperUser"))
{
}
You can also use
if(Roles.GetRolesForUser(model.UserName).Contains("Admin")){
}