Ограничить доступ к различным разделам сайта по ip - PullRequest
2 голосов
/ 09 ноября 2011

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

1 Ответ

3 голосов
/ 09 ноября 2011

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

...