如何在Asp.Net Identity中获得用户的角色名称

 2023-02-15    326  

问题描述

我试图弄清楚如何在身份框架中找到用户角色名称.

我有这样的配置,只会分配给用户的一个角色.

如何在Asp.Net Identity中获得用户的角色名称

所以,我尝试使用

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

但我得到的只是learid而不是rolename.

任何人都可以帮助我找到用户的rolename?

推荐答案

在代码中,user对象表示具有导航属性Roles的AspNetUsers表,它表示AspNetUserInRoles表而不是AspNetRoles表.
所以当你尝试浏览

user.Roles.FirstOrDefault()

它为您提供了存储userid和learid的AspNetUserInRoles.

相反,您可以尝试UserManger的GetRoles方法,该方法将分配返回的角色返回List<string>.但正如你所提到的那样,只有一个角色,因此您可以从GetRoles方法的结果中采用第一个值.

您的函数应类似于下面给出的功能:

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

其他推荐答案

如果您有一个用户列表,您必须执行以下操作:

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

以上所述是小编给大家介绍的如何在Asp.Net Identity中获得用户的角色名称,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/33772.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。