Reputation: 871
Before the update of the dll's in the Entity Framework i was able to do this
user.Roles.Where(r => r.Role.Name == "Admin").FisrtOrDefault();
Now, i can only do r.RoleId, and i can't find a way to retreive the name of thar Role Id. I'm using this in my controllers and in my AuthorizeAttribute class.
Can someone help me here?
Regards
Upvotes: 12
Views: 17115
Reputation: 4705
I've just had almost exactly the same issue and I solved it like this:
public class UserRole : IdentityUserRole
{
public virtual Role Role { get; set; } // add this to see roles
public virtual User User { get; set; } // add this to see users
}
Now your original code user.Roles.Where(r => r.Role.Name == "Admin").FirstOrDefault();
will work, which could be handy if you don't have easy access to the RoleManager
for any reason.
Upvotes: 2
Reputation: 151
Try this
string id = UserManager.FindByEmail(model.Email).Id;
IList<string> roleNames=UserManager.GetRoles(id);
Upvotes: 9
Reputation: 1789
If your aim is to check if a user is in a role you can access it from the IPrincipal.User object in an action
User.IsInRole("Admin");
Upvotes: 1
Reputation: 54618
Ask the RoleMananger?
RoleManager.Roles.
// or
RoleManager.FindByIdAsync()
// or
RoleManager.FindByNameAsync()
You may want to take some time and learn the new security features in Asp.Net Security and Asp.Net Identity.
Upvotes: 8