我需要按角色过滤用户,但所有用户都属于两个角色
示例:一位用户Admin
和Group1
,另一位用户User
和Group1
。
现在我想按Group1
角色过滤它们,然后忽略Admin
和User
。
public ViewResult Index()
{
string[] roles = Roles.GetRolesForUser();
var group = string.Join(" ", roles );
group = group.Replace("Admin", "");//Used this to single out Group1 from Admin user
return View(new UserViewModel
{
Users = _userService.FindAll().Where(x => Roles.GetRolesForUser(x.UserName).Contains(group)),
Roles = roles
});
}
这不会出错,但会显示为空。我想我知道为什么但仍然无法弄清楚如何绕过它...
答案 0 :(得分:2)
public ViewResult Index()
{
var roleFilter = Roles.GetRolesForUser().First(r => !r.equals("Admin"));
return View(new UserViewModel
{
Users = _userService.FindAll().Where(x => Roles.GetRolesForUser(x.UserName).Contains(roleFilter)),
Roles = new [] {roleFilter}
});
}
答案 1 :(得分:2)
好的,就在这里。我对您的问题的理解是您要检查用户是否有一个或多个特定角色。如果是这样,允许访问;否则,拒绝他们进入并将他们送入黑洞。在您的示例中,您只想检查一个特定角色。阅读您的一些评论,您可能还想在某个时候检查多个角色。我将向您展示的代码示例允许您针对一组一个或多个角色检查用户,该角色必须分配给用户才能访问该页面。
string[] requiredRoles = new string[] { "Awesome", "Pancake" };
if (requiredRoles.Except(theUsersAssignedRoles).Any())
{
// Authorization has failed!
// The user is not awesome and they are not a pancake.
}
else
{
// User is awesome and a pancake so let them through.
}
这里的想法是列出所有必需的角色,并减去用户分配给他或她的所有角色。如果减法后列表中还有任何角色,则用户没有所有必需的角色。这里有一些例子。授权所需的角色位于减法符号的左侧,而用户指定的角色位于减法符号的右侧,就像上面的代码一样。
用户很棒,还有煎饼,所以他们可以访问。请注意,我们最终得到一个空集,这意味着用户满足要求:
{ "Awesome", "Pancake" } - { "Awesome", "Pancake" } = { }
用户只是一个煎饼。他们不允许访问。结果集包含“Awesome”,这意味着它们缺少“令人敬畏”的角色:
{ "Awesome", "Pancake" } - { "Pancake" } = { "Awesome" }
此用户不是很棒或者是煎饼,但她是管理员。尽管如此,我们需要很棒的煎饼才能进入页面,因此拒绝访问该用户:
{ "Awesome", "Pancake" } - { "Admin" } = { "Awesome", "Pancake" }
如果您有任何问题或者这不是您想要的,请发表评论。如果需要的话,我很乐意帮助你。
答案 2 :(得分:0)
听起来你真的想尝试使用这种方法:
http://msdn.microsoft.com/en-us/library/system.web.security.roleprovider.getusersinrole.aspx
参数
roleName
键入:System.String 获取用户列表的角色名称。