Как заставить пользователей не в роли, - PullRequest
5 голосов
/ 16 марта 2011

Есть ли какой-нибудь достаточно эффективный способ получить список пользователей, которые не имеют конкретной роли?

Единственные методы, которые я вижу, это

  1. Получить всепользователи из БД и сделать проверку в коде

  2. Перейти непосредственно к БД и обойти поставщика роли

Ответы [ 5 ]

4 голосов
/ 01 октября 2012

Изменение значения Select на Where в коде, предоставленном Алексом, фактически возвращает результаты, а не просто true / false.

var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
    .Cast<MembershipUser>()
    .Where(u => 
        !usersInRole.Contains(u.UserName)
    );
4 голосов
/ 16 марта 2011

Другой способ - расширить RoleProvider с помощью метода GetUsersNotInRole () и выполнить там запрос к БД.Вы также можете объединить RoleProvider.GetUsersInRole () с MembershipProvider.GetAllUsers () и найти разницу

4 голосов
/ 16 марта 2011

Вы можете просто получить список всех пользователей и извлечь пользователей в роли, указанной в списке:

var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
    .Cast<MembershipUser>()
    .Select(u => 
        !usersInRole.Contains(u.UserName)
    );
2 голосов
/ 16 марта 2011

Я не думаю, что что-то не так с обходом поставщика ролей и запросом базы данных напрямую.Таким образом, вы определенно получите лучшую производительность.

1 голос
/ 23 августа 2013

Нашел этот путь, надеюсь, это поможет другим.Очень просто.

 var usernames = Roles.GetUsersInRole("Administrator");

            var adminUsers = db.UserProfiles
                 .Where(x => !usernames.Contains(x.UserName)).ToList();
            return View(adminUsers);
...