我的应用程序使用Windows授权,但我手动指定具有以下访问权限的用户:
[Authorize(Users = "domain\\userone, domain\\usertwo, domain\\userthree")]
我想知道是否可以在其中放置一个循环来循环访问从数据库调用返回的用户列表,因此例如快速模拟将从数据库中获取用户的NT帐户列表:
List<string> users = new List<String>();
SqlConnection con = new SqlConnection(Properties.Default.ConnectionString);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = @"SELECT NT_ACCOUNT FROM USERS";
SQLDataReader reader = cmd.ExecuteReader();
while(reader.Read())
{
users.Add(reader.GetValue(reader.FieldCount));
}
以及我认为授权的样子:
foreach(String nt_account in users)
{
[Authorize(Users = nt_account)]
}
或者使用linq查询可能会更容易,我不确定,上面的代码只是猜测。
答案 0 :(得分:3)
修改AuhorizeCore方法:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (httpContext == null)
{
throw new ArgumentNullException("httpContext");
}
IPrincipal user = httpContext.User;
if (!user.Identity.IsAuthenticated)
{
return false;
}
//_usersSplit = ListOfAuthorizedNames
if ((_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)) && (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)))
{
return false;
}
return true;
}