在上下文中查找用户角色。没有身份管理器的用户?

时间:2019-07-15 13:37:19

标签: c# asp.net-core asp.net-web-api entity-framework-core identity

我正在研究一个const replace = date => date.replace(/0?(\d+?)\/0?(\d+?)\/(\d+)/, '$3,$2,$1'); console.log(replace('04/07/2019')); console.log(replace('20/07/2019')); console.log(replace('20/10/2019'));项目。

我有WebApi

ApplicationUser

还有public class ApplicationUser : IdentityUser { public string FirstName { get; set; } public string LastName { get; set; } } 和他的界面:

context

我想找到用户。我正在通过以下代码行做到这一点:

public interface ITaskManagerDbContext
{
    DbSet<Project> Projects { get; set; }

    DbSet<ApplicationUser> Users { get; set; }

    Task<int> SaveChangesAsync(CancellationToken cancellationToken);
}

//class

public class TaskManagerDbContext : IdentityDbContext<ApplicationUser>, ITaskManagerDbContext
{
    public TaskManagerDbContext(DbContextOptions<TaskManagerDbContext> options)
        : base(options)
    {
    }

    public DbSet<Project> Projects { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.ApplyConfigurationsFromAssembly(typeof(TaskManagerDbContext).Assembly);
    }
}

我的问题是,如何在我的var user = await this.context.Users.FindAsync(request.ApplicationUserId); 中找到附加到用户的Role?我不想使用context中的UserManagerRoleManager。是否可以在Identity中找到用户的角色?

1 个答案:

答案 0 :(得分:1)

唯一的绊脚石实际上是User本身上没有类似Roles的集合。但是,您可以直接从上下文访问UserRole并根据用户进行查询:

var roleIds = await _context.UserRoles
    .Where(x => x.UserId == user.Id)
    .Select(x => x.RoleId)
    .ToListAsync();

var roles = await _context.Roles
    .Where(x => roleIds.Contains(x.Id))
    .ToListAsync();

是的,这需要另外两个查询,但是可以完成工作。当然,更有效的方法是只使用UserManager<TUser>.GetRolesAsync