web-dev-qa-db-fra.com

Comment obtenir le nom de rôle pour l'utilisateur dans Asp.Net Identity

J'essaie de comprendre comment trouver le nom de rôle d'utilisateur dans le cadre d'identité.

J'ai une telle configuration qu'il n'y aura qu'un seul rôle attribué à un utilisateur.

Alors, j'ai essayé d'utiliser 

public string GetUserRole(string EmailID, string Password)
{
    var user = await _userManager.FindAsync(EmailID, Password);
    var roleid= user.Roles.FirstOrDefault().RoleId;
}

Mais ce que je reçois, c'est juste RoleId et non RoleName.

Quelqu'un peut-il m'aider à trouver le nom de rôle pour l'utilisateur?

5
Sadik Ali

Dans votre code, l'objet user représente la table AspNetUsers qui possède une propriété de navigation Roles qui représente la table AspNetUserInRoles et non la table AspNetRoles . Ainsi, lorsque vous essayez de naviguer dans

user.Roles.FirstOrDefault()

il vous donne la AspNetUserInRoles qui stocke UserId et RoleId.

A la place, vous pouvez essayer la méthode UserManger de GetRoles qui vous renverra List<string> des rôles attribués à l'utilisateur. Mais comme vous l'avez mentionné, il ne s'agira que d'un seul rôle, vous pouvez donc prendre la première valeur du résultat de la méthode GetRoles.

Votre fonction devrait être semblable à celle donnée ci-dessous:

public async string GetUserRole(string EmailID, string Password)
{
    var user = await _userManager.FindAsync(EmailID, Password);
    string rolename = await _userManager.GetRoles(user.Id).FirstOrDefault();
    return rolename;
}
14
Zahir Firasta

Si vous avez une liste d'utilisateurs, vous devez le faire:

var usuarioManager = Request.GetOwinContext().GetUserManager<UserManager<Usuario>>();
var roleManager = Request.GetOwinContext().Get<RoleManager<IdentityRole>>();

var roles = roleManager.Roles.ToList();

var usuarios = usuarioManager.Users.Include(x => x.Roles).ToList();

usuarios.ForEach((x) =>
{
    if (x.Roles.Any())
    {
        var roleDb = roles.FirstOrDefault(r => r.Id == x.Roles.FirstOrDefault().RoleId);
        if (roleDb != null)
            x.RoleName = roleDb.Name;
        }
});
0