使用ASP.NET身份检索DAL中用户的角色



我使用ASP.NET身份有一个bog标准的用户和角色实现:

public class User : IdentityUserBase { }
public class Role : IdentityRoleBase { }
public class UserRole : IdentityUserRoleBase { }

我需要用户类中的属性或方法,该属性或方法返回用户的(第一个(角色(在我的应用中,每个用户只能有一个(:

public class User : IdentityUserBase
{
  // ...
  public Role GetRole()
  {
    return this.Roles.FirstOrDefault(); // this actually returns a UserRole object, with only a UserId and a RoleId available (no Role object)
  }
}

有没有办法在DAL中进行此操作?

我知道使用Rolemanager,dbcontext或httpcontext等全局对象在UI层上可以使用,但是我无法访问用户类中的对象(并且不想将其作为参数作为参数(。<<<<<<<<<<<<<<<<<<<<<<<</p>

我本来以为这一定是标准用例,但找不到答案...我的问题基本上与这个问题相同,但是我需要访问用户对象本身中的角色信息。

首先,您不应该将GetRole方法放在User类中,请保持这些模型简单清洁。

要获得用户的角色,您需要DB上下文和用户ID,您可以执行此操作:

var userId = ...; //Get the User ID from somewhere
var roles = context.Roles
    .Where(r => r.Users.Any(u => u.UserId == userId))
    .ToList();

这有效:

public class UserRole : IdentityUserRoleBase
{
    public virtual Role Role { get; set; } // add this to see roles
    public virtual User User { get; set; } // add this to see users
}

UserRole属性现在通过User对象可用的UserRole属性暴露。

回顾一下此处的ASP.NET身份的演变,默认情况下,IdentityUserRole中存在这些属性,但随后在版本2中删除,以支持通用主键,并建议使用UserManager类。但是,这无助于像我这样的案例,在DAL中需要进行操作,并且不容易访问此类(或任何上下文类(。鉴于我永远不会有任何其他类型的主键,所以这样做是很安全的。

相关内容

  • 没有找到相关文章

最新更新