C# 如何检查是否只有一个角色匹配?

C# 如何检查是否只有一个角色匹配?,c#,asp.net-mvc,membership,C#,Asp.net Mvc,Membership,我需要按角色筛选用户,但所有用户都属于两个角色 示例:Admin和Group1用于一个用户,而user和Group1用于另一个用户 现在我想按Group1角色过滤它们,并忽略Admin和User public ViewResult Index() { string[] roles = Roles.GetRolesForUser(); var group = string.Join(" ", roles ); group = group.Replace("Admin",

我需要按角色筛选用户,但所有用户都属于两个角色

示例:
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
                    });
}

这不会出错,但会显示为空。我想我知道为什么,但仍然不知道如何绕过它…

听起来你真的在尝试使用这种方法:

参数

roleName
类型:System.String 要获取用户列表的角色的名称


好了,开始了。我对您的问题的理解是,您希望检查用户是否具有一个或多个特定角色。如果是,请允许访问;否则,拒绝他们进入,并将他们送入黑洞。在您的示例中,听起来您只想检查一个特定角色。阅读您的一些评论时,您可能还希望在某个时候检查多个角色。我将向您展示的代码示例允许您根据一组用户必须分配的一个或多个角色来检查用户,以便访问页面

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”角色:

这个用户不是一个了不起的或煎饼,但她是一个管理员。尽管如此,我们仍然需要很棒的煎饼才能进入页面,因此该用户被拒绝访问:

{ "Awesome", "Pancake" } - { "Admin" } = { "Awesome", "Pancake" }

如果你有任何问题或这不是你想要的,请留下评论。如果需要,我很乐意进一步帮助您。

Roles.GetRolesForUser(x.UserName)-此返回的是什么类型?
string[]
很抱歉忘记提到这一点。这看起来像是编译错误,数组上的Contains不接受数组作为其参数!根本没有错误。。。我的坏~!!!更新问题!!!更新的问题,在绝望中我忘记了我已经做了这件事…我知道这会起作用。但我需要另一个组,也就是<代码>组1在示例中是动态的,因为它不会每次都相同。决定角色筛选器的逻辑是什么?你打算在post上把它传递给你的索引操作方法吗。。这不是什么“逻辑”,但看看这个问题,你会看到在方法的开头弄乱了字符串,这应该是“角色过滤器”,尽管我不好意思这么称呼它>\u>是的,但是你总是从角色列表中过滤掉管理员吗?你想硬编码吗?我完全确定如何在运行时决定过滤器是的,我总是删除
Admin
,因为这是一个只有
Admin
角色才能访问的页面,所以总是他们。你说的硬编码到底是什么意思?嗯,很有可能你是对的。。。老实说,我现在很困惑,我甚至不知道该怎么做:对不起,不同的时区,我在睡觉。我试试看。好的!tranceporters解决方案正是我所需要的,但您的(不知不觉地)解决了我在应用程序不同部分的另一个问题!所以+谢谢!!!:D
{ "Awesome", "Pancake" } - { "Pancake" } = { "Awesome" }
{ "Awesome", "Pancake" } - { "Admin" } = { "Awesome", "Pancake" }