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?
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;
}
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;
}
});