EF 2.1让所有用户都扮演角色

时间:2018-08-10 12:58:35

标签: asp.net .net-core

我有一个带有EF 2.1应用程序的.NET Core 2.1,我想直接查询现有的ASP.NET MVC数据库以获取用户和角色。

具体地说,我想传入代表角色名称的字符串数组,并找到这些角色中用户的不同列表。

我有目前可以使用的代码,但感觉效率很低-我基本上遍历Roles数组并获取所有用户的列表,然后执行Union

var accounts = GetAllUsersInRole("Accounts").ToList();
var managers = GetAllUsersInRole("Manager").ToList();

users = (managers.Union(accounts).ToList();

public IQueryable<ApplicationUser> GetAllUsersInRole(string roleName)
    {
        var idsWithPermission = _context.AspNetRoles.Where(x => x.Name == roleName)
            .Select(p => p.UserId);

var users = _context.AspNetUsers.Where(u => idsWithPermission.Contains(u.Id)).ToList();
        return users.AsQueryable();
    }

我希望我错过了使用EF2.1轻松实现这一目标的方法

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用ASP.NET Identity提供的UserManager

private UserManager<ApplicationUser> _userManager; 

public AccountController(UserManager<ApplicationUser> userManager) {
   _userManager = userManager;
}

如果您已经在Startup.cs中正确设置了身份,则UserManager应该自动在DI容器中注册

然后您要做的就是致电await _userManager.GetUsersInRoleAsync(rolename);