在我们的MVC 3解决方案中,我们有一个包含许多部分的网站。客户希望能够通过IP地址(来自管理员部分)管理对每个部分的访问。实现此要求的标准方法是什么? 我看,像这样:每个部分都有一个代表IP地址的通配符列表,然后我们以某种方式使用这个通配符验证IP地址。
答案 0 :(得分:3)
我建议不要在代码中直接使用IP地址 - 这些地址往往会不时发生变化。创建“区域”系统,类似于许多个人防火墙。
我的解决方案基本上是这样的:
创建自定义授权属性
public class AuthorizeZone: AuthorizeAttribute
{
private string _zone;
public AuthorizeZone(string zoneName)
{
_zone = zoneName;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var zone = GetZoneIpMappingsFromXMLorDB_IdeallyCached(_zone);
return zone.ContainsIp(httpContext.Request.UserHostAddress); // implement by simple list or ip-mask
}
}
然后你就像这样使用它
[AuthorizeZone("Intranet")]
public ActionResult Foo()
{}
您的区域定义取决于您,使用XML,数据库,等等......