以编程方式授权Windows用户对一串用户?

时间:2012-01-26 15:43:40

标签: c# .net windows asp.net-mvc-3

以编程方式,我可以根据Windows用户是否处于特定的角色来授权Windows用户:

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

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

// ...

return isAuthorized;

我无法弄清楚该怎么做,是如何匹配用户的名字,例如,如果个人用户的列表被授予访问权限。

因此,假设您尝试针对给定的授权用户字符串对用户进行身份验证,就像使用普通的AuthorizeAttribute一样:

[Authorize(Users = @"DOMAIN\User1, DOMAIN\User2, DOMAIN\User3")]
public ActionResult SomeAction(){ ... }

如何以编程方式针对该用户字符串授权用户?

@"DOMAIN\User1, DOMAIN\User2, DOMAIN\User3"

编辑:好的,这是我的困惑点:如果您(在普通的AuthorizeAttribute中)声明如下,则指定多个用户有什么意义:

[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?

我可能在这里不合时宜,并且遗漏了一些信息。请赐教!

编辑2:MVC来源为我揭开了一些神秘面纱。它确实与以下答案中的建议类似:

if (_usersSplit.Length > 0 &&
   !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) {
    return false;
}

1 个答案:

答案 0 :(得分:0)

我会使用HashSet,因为测试用户的存在对于此集合类型来说是一个非常快速的操作。

首先,拆分字符串,然后将其添加到HashSet。

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
}