代码之家  ›  专栏  ›  技术社区  ›  SadikAli

如何在Asp中获取用户的角色名。网络身份

  •  14
  • SadikAli  · 技术社区  · 8 年前

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

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

    但我得到的只是RoleId,而不是RoleName。

    有人能帮我找到用户的角色名吗?

    2 回复  |  直到 8 年前
        1
  •  26
  •   Zahir Firasta    8 年前

    在您的代码中, user 对象表示 AspNetUsers Roles 这代表了 AspNetUserInRoles AspNetRoles 桌子 所以当你尝试导航时

    user.Roles.FirstOrDefault()
    

    它给了你 它存储用户ID和角色ID。

    UserManger GetRoles List<string> 为用户分配了个角色。但正如你所提到的,这将只是一个角色,因此你可以从结果中获得第一个价值 方法

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

    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;
    }
    
        2
  •  4
  •   lmiguelvargasf    7 年前

    如果你有一个用户列表,你必须这样做:

    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;
            }
    });
    
    推荐文章