Ограничить доступ к различным разделам сайта по 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, базу данных, что угодно...