C# 以编程方式针对用户字符串授权Windows用户?

C# 以编程方式针对用户字符串授权Windows用户?,c#,.net,windows,asp.net-mvc-3,C#,.net,Windows,Asp.net Mvc 3,以编程方式,我可以根据Windows用户是否担任以下特定角色对其进行授权: if(!User.Identity.IsAuthenticated) return false; var isAuthroized = User.IsInRole(@"DOMAIN\Some Role"); // ... return isAuthorized; 我不知道该怎么做,比如,如果给了一个单独用户的列表访问权限,如何匹配用户名 因此,假设您正试图根据给定的授权用户字符串对用户进行身份验证,就像使

以编程方式,我可以根据Windows用户是否担任以下特定角色对其进行授权:

if(!User.Identity.IsAuthenticated)
    return false;

var isAuthroized = User.IsInRole(@"DOMAIN\Some Role");

// ...

return isAuthorized;
我不知道该怎么做,比如,如果给了一个单独用户的列表访问权限,如何匹配用户名

因此,假设您正试图根据给定的授权用户字符串对用户进行身份验证,就像使用普通的authorized属性一样:

[Authorize(Users = @"DOMAIN\User1, DOMAIN\User2, DOMAIN\User3")]
public ActionResult SomeAction(){ ... }
如何以编程方式针对该用户字符串授权用户

@"DOMAIN\User1, DOMAIN\User2, DOMAIN\User3"
编辑:好的,这是我的困惑点:如果在一个普通属性中有如下声明,那么指定多个用户有什么意义:

[Authorize(Users=@"User1,User2,User3", Roles=@"SomeRole"]

// I can do this:

User.IsInRole(roles);

// But what's the equivalent for the specified users?

User.Identity.Name.IsInNames(names); // <-- How is the done programmatically?

我将使用HashSet,因为对于这种集合类型,测试用户是否存在是一个非常快速的操作

首先,拆分字符串,然后将其添加到哈希集中

string[] splittedUsers = usersString.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries);
var users = new HashSet<string>(splittedUsers);

这不是定义了一个角色吗?针对一组用户授权一个用户??我不明白。提供您自己的角色,这将需要将角色注入到用户中,显然这封装了用户列表和管理UI。
string[] splittedUsers = usersString.Split(new string[] { ", " }, StringSplitOptions.RemoveEmptyEntries);
var users = new HashSet<string>(splittedUsers);
string user = "xy";
if (users.Contains(user)) {
    // Do something with user
}