Avant la mise à jour des dll dans Entity Framework, je pouvais le faire.
user.Roles.Where(r => r.Role.Name == "Admin").FisrtOrDefault();
Maintenant, je ne peux que faire r.RoleId, et je ne peux pas trouver un moyen de récupérer le nom de ce rôle. J'utilise ceci dans mes contrôleurs et dans ma classe AuthorizeAttribute.
Quelqu'un peut m'aider ici?
Cordialement
Demandez au RoleMananger ?
RoleManager.Roles.
// or
RoleManager.FindByIdAsync()
// or
RoleManager.FindByNameAsync()
Vous voudrez peut-être prendre un peu de temps et apprendre les nouvelles fonctionnalités de sécurité dans Asp.Net Security et Asp.Net Identity .
Essaye ça
string id = UserManager.FindByEmail(model.Email).Id;
IList<string> roleNames=UserManager.GetRoles(id);
Si votre objectif est de vérifier si un utilisateur occupe un rôle, vous pouvez y accéder à partir de l'objet IPrincipal.User dans une action.
User.IsInRole("Admin");
Je viens d'avoir presque exactement le même problème et je l'ai résolu comme ceci:
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
}
Désormais, votre code user.Roles.Where(r => r.Role.Name == "Admin").FirstOrDefault();
fonctionnera, ce qui pourrait être pratique si vous n’avez pas facilement accès à RoleManager
pour une raison quelconque.