В ef 2.1 все пользователи будут распределены по ролям

У меня есть .NET Core 2.1 с приложением EF 2.1, и я хотел бы напрямую запросить существующую базу данных ASP.NET MVC, чтобы получить пользователей и роли.

В частности, я хотел бы передать массив строк, представляющих имена ролей, и найти отдельный список пользователей в этих ролях.

У меня есть код, который в настоящий момент работает, но кажется действительно неэффективным - я в основном перебираю массив ролей и получаю список всех пользователей, а затем выполняю объединение

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.

0
0
364
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Самый простой способ сделать это - использовать UserManager, предоставляемый ASP.NET Identity.

private UserManager<ApplicationUser> _userManager; 

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

UserManager должен автоматически регистрироваться в контейнере DI, если вы правильно настроили идентификацию в Startup.cs.

Тогда все, что вам нужно сделать, это вызвать await _userManager.GetUsersInRoleAsync(rolename);

Другие вопросы по теме