【发布时间】:2012-01-19 10:59:27
【问题描述】:
我在 MVC 解决方案中实现了以下操作属性。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeADAttribute : AuthorizeAttribute
{
public string[] Groups { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (base.AuthorizeCore(httpContext))
{
/* Return true immediately if the authorization is not
locked down to any particular AD group */
if (Groups == null)
return true;
foreach (var group in Groups)
if (httpContext.User.IsInRole(group))
return true;
}
return false;
}
}
并像这样调用它:
public const string Admin = "MY_DOMAIN\\Admins";
public const string Users = "MY_DOMAIN\\Users";
public const string AddUser = "MY_DOMAIN\\AddUser";
[AuthorizeAD(Groups = new string[] { Admin, Users })]
public ActionResult GridData(...)
{ ... }
[AuthorizeAD(Groups = new string[] { Admin, Users, AddUser })]
public ActionResult Add(...)
{ ... }
到目前为止,它似乎工作正常(本地没有问题),直到有人注意到(关于我发布的另一个问题),我在部署的实例上收到 401 错误。
我认为我的 AuthorizeADAttribute 需要重新设计,除非有人知道主机环境中的问题可能是什么。这个想法是用户必须在活动目录上的管理员或用户组中才能访问该站点,如果他/她被分配到用户角色,他们也需要属于另一个组,例如:添加,删除、更新等...
到目前为止,我很难过:/
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-3 iis active-directory