5

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

我能看到的唯一方法是

  1. 从数据库中获取所有用户并检查代码

  2. 直接进入数据库并回避角色提供者

4

5 回答 5

4

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

var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
    .Cast<MembershipUser>()
    .Where(u => 
        !usersInRole.Contains(u.UserName)
    );
于 2012-10-01T19:07:35.363 回答
4

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

于 2011-03-16T12:51:38.593 回答
4

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

var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
    .Cast<MembershipUser>()
    .Select(u => 
        !usersInRole.Contains(u.UserName)
    );
于 2011-03-16T12:56:04.767 回答
2

我不认为绕过角色提供者直接查询数据库有什么问题。这样你肯定会得到最好的表现。

于 2011-03-16T12:47:01.933 回答
1

找到这种方式,希望这对其他人也有帮助。很容易。

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

            var adminUsers = db.UserProfiles
                 .Where(x => !usernames.Contains(x.UserName)).ToList();
            return View(adminUsers);
于 2013-08-23T16:06:19.917 回答