【问题标题】:How to get role name for user in Asp.Net Identity如何在 Asp.Net Identity 中获取用户的角色名称
【发布时间】:2017-08-14 12:40:39
【问题描述】:

我正在尝试弄清楚如何在身份框架中查找用户角色名称。

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

所以,我尝试使用

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

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

谁能帮我找到用户的 RoleName 吗?

【问题讨论】:

    标签: asp.net asp.net-identity-2


    【解决方案1】:

    在您的代码中,user 对象表示具有导航属性 RolesAspNetUsers 表,该属性表示 AspNetUserInRoles 表而不是 AspNetRoles 表。 因此,当您尝试浏览时

    user.Roles.FirstOrDefault()
    

    它为您提供 AspNetUserInRoles,其中存储了 UserId 和 RoleId。

    相反,您可以尝试UserMangerGetRoles 方法,该方法将返回您分配了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;
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-29
        • 2018-01-08
        • 1970-01-01
        • 2014-03-08
        • 2017-11-13
        • 1970-01-01
        • 1970-01-01
        • 2015-09-01
        相关资源
        最近更新 更多