ASP.NET Identity check user roles is not working
asp.net, asp.net-identity, asp.net-mvc, c#
Solution
There seems to be an issue. [The issue by design]
- The role names are case sensitive in AuthorizeAttribute and User.IsInRole
- The role names are case insensitive in UserManager.IsInRole
Moreover, check for the correct role name is used for the verification.
[The above is based on the test performed with below code. Role Name="Admin", User is added to Role "Admin".]
[Authorize(Roles="Admin")] /*True as "Admin" has A capital as entered in Role name*/
public ActionResult Secured()
{
if (User.IsInRole("admin")) /*This is False*/
{
Console.WriteLine("In");
}
if(UserManager.IsInRole(User.Identity.GetUserId(), "admin")) /*This is True!!*/
{
Console.WriteLine("In");
}
return View();
}
If we change the attribute to `[Authorize(Roles="admin")]`, it redirects to Login page.
Problem
I have an ASP.NET MVC 5 application. I'm using the standard ASP.NET Identity provider for user and role management. It is important that I'm using the IdentityUser from an own repository project, but this seems ok. I can register, login, edit users, and manage their roles. I add user to Role with these lines: ``` UserManager.AddToRole(userdetail.Id, r); db.Entry(userdetail).State = EntityState.Modified; db.SaveChanges(); ``` This seems working in DB level. But, I can't use Role based authentications, actually the simples ``` HttpContext.User.IsInRole("Administrator") ``` doesn't working too. ``` [Authorize(Roles="Administrator")] ``` doesn't working too. I can check only with this method, whether user is an administrator: ``` UserManager.IsInRole(userID, "Administrator"). ``` Why? In every tutorial what I found, everything works fine. The different project repository could be the reason? Or ASP.NET Identity is broken so much? Please advice,