以编程方式,我可以根据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;
}
答案 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
}