2

在我们的 MVC 3 解决方案中,我们有一个包含许多部分的站点。客户希望能够通过 IP 地址(来自管理部分)管理对每个部分的访问。执行此要求的标准方法是什么?我明白了,就像这样:每个部分都有一个通配符列表,代表 IP 地址,然后我们以某种方式使用这个通配符验证 IP 地址。

4

1 回答 1

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、数据库等...

于 2011-11-09T12:58:24.387 回答