繁体   English   中英

使用ASP.NET Identity在DAL中检索用户的角色

[英]Retrieve Role for a User in the DAL using ASP.NET Identity

我有一个使用ASP.NET Identity的用户和角色的沼泽标准实现:

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

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

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中有没有办法做到这一点?

我知道可以在UI层使用RoleManager,DbContext或HTTPContext之类的全局对象,但我无权访问User类中的对象(也不必将其作为参数传递)。

我本以为这必须是一个标准用例,但我找不到答案……我的问题与问题基本相同,但是我需要访问User对象本身中的Role信息。

首先,您不应将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
}

现在,通过User对象可用的UserRole属性公开了UserRole属性。

回首走过ASP.NET身份的演变这里 ,这些属性存在于IdentityUserRole默认情况下,在第1版,但随后在第2版,以支持通用的主键,并建议使用去除UserManager类。 但是,这对像我这样需要在DAL中完成操作并且无法轻松访问此类(或任何上下文类别)的情况没有帮助。 鉴于我将再也没有其他类型的主键,因此这样做非常安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM