如何让没有角色的用户,

时间:2011-03-16 12:43:09

标签: c# asp.net asp.net-membership roles roleprovider

是否有任何合理有效的方法来获取不属于特定角色的用户列表?

我能看到的唯一方法是

  1. 从数据库获取所有用户并执行检入代码

  2. 直接转到数据库并回避角色提供程序

5 个答案:

答案 0 :(得分:4)

另一种方法是使用方法GetUsersNotInRole()扩展RoleProvider并在那里查询数据库。您还可以将RoleProvider.GetUsersInRole()与MembershipProvider.GetAllUsers()结合使用并找出差异

答案 1 :(得分:4)

您可以获取所有用户列表并从列表中指定角色中提取用户:

var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
    .Cast<MembershipUser>()
    .Select(u => 
        !usersInRole.Contains(u.UserName)
    );

答案 2 :(得分:4)

将Alex中提供的代码中的Select更改为Where将实际返回结果,而不仅仅是true / false。

var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
    .Cast<MembershipUser>()
    .Where(u => 
        !usersInRole.Contains(u.UserName)
    );

答案 3 :(得分:2)

我认为绕过角色提供程序并直接查询数据库没有任何问题。你肯定会以这种方式获得最佳表现。

答案 4 :(得分:1)

发现这种方式,希望这有助于其他人。很容易。

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

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