有没有一种相对高效的方法来获取不在特定角色中的用户列表?
我能想到的仅有的两种方法是:
从数据库中获取所有用户并在代码中进行检查
直接访问数据库,绕过角色提供程序
有没有一种相对高效的方法来获取不在特定角色中的用户列表?
我能想到的仅有的两种方法是:
从数据库中获取所有用户并在代码中进行检查
直接访问数据库,绕过角色提供程序
var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
.Cast<MembershipUser>()
.Select(u =>
!usersInRole.Contains(u.UserName)
);
在Alex提供的代码中,将Select更改为Where实际上会返回结果,而不仅仅是true/false。
var usersInRole = Roles.GetUsersInRole("admin");
var users = Membership.GetAllUsers()
.Cast<MembershipUser>()
.Where(u =>
!usersInRole.Contains(u.UserName)
);
另一种方法是通过扩展RoleProvider并添加GetUsersNotInRole()方法,在此处查询数据库。您还可以将RoleProvider.GetUsersInRole()与MembershipProvider.GetAllUsers()结合使用,找到差异。
我认为绕过角色提供程序直接查询数据库并没有什么问题。这样做肯定可以获得最佳性能。
SELECT *
FROM users u
WHERE NOT EXISTS (
SELECT 1
FROM UsersInRoles ur
WHERE ur.RoleId = '8E79BA23-E568-423F-80F3-AF60C33DC7EB'
AND ur.UserId = u.UserID
)
- MvcCmsJon发现了这种方法,希望能帮到其他人。非常简单。
var usernames = Roles.GetUsersInRole("Administrator");
var adminUsers = db.UserProfiles
.Where(x => !usernames.Contains(x.UserName)).ToList();
return View(adminUsers);