web-dev-qa-db-fra.com

Obtenir le nom du rôle dans IdentityUserRole 2.0 dans ASP.NET

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

12
MarBVI

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 .

8
Erik Philips

Essaye ça

string id = UserManager.FindByEmail(model.Email).Id;
IList<string> roleNames=UserManager.GetRoles(id);
8
Neeraj Singh

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");
1
Phil

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 à RoleManagerpour une raison quelconque.

0
Ed Graham