Ограничить доступ к различным разделам сайта по ip

В нашем решении MVC 3 у нас есть сайт с множеством разделов. Клиент хочет иметь возможность управлять доступом к каждому разделу по IP-адресу (со стороны администратора). Каковы стандартные способы реализации этих требований? Я вижу что-то вроде этого: в каждом разделе есть список подстановочных знаков, которые представляют IP-адреса, и затем мы каким-то образом проверяем IP-адрес, используя эти подстановочные знаки.

1 ответ

Я бы предложил не использовать напрямую 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, базу данных, что угодно...

Другие вопросы по тегам