2009-09-02 2 views
3

URL-адрес раздела администрирования моего сайта всегда начинается с Admin/. Возможно ли в ASP.NET MVC ограничить доступ к пользователям, используя эту часть URL-адреса?ASP.NET MVC: Ограничение доступа с использованием URL-адреса

Очевидно, что я буду держать [Authorize(Roles = "Administrator")] на соответствующих контроллерах и действиях, но мне интересно, будет ли это быстрее для приложения, если он может просто взглянуть на URL вместо того, чтобы входить в код.

ответ

2

Нашел ответ в книге Стивена Сандерсона, Pro ASP.NET MVC Framework.

Вставьте следующий код в свой файл web.config.

<location path ="Admin"> 
    <system.web> 
    <authorization> 
     <deny users="?"/> 
     <allow roles="Administrator"/> 
     <deny users="*"/> 
    </authorization> 
    </system.web> 
</location> 

Это означает, что для любого URL, соответствующего ~/Admin/*, приложение будет запрещать доступ к неавторизованным посетителям или других посетителей, кроме тех, с ролью «Администратор».

1

Это будет работать, но затем вы привяжите авторизацию к текущей модели маршрутизации. Красота авторизации Actions заключается в том, что он абстрагирует функциональность (которая, фактически, то, что вы хотите контролировать) от структуры url, которую вы используете в настоящее время.

Это также означает, что вы можете выполнить Unit Test этой функции.

+0

. Есть ли преимущества в использовании URL для авторизации? – ajbeaven

1

Вы можете создать BaseAdminController, имея все ваши администратора Контроллеры расширить это:

[Authorize(Roles = "Administrator")] 
public class BaseAdminController : Controller { 
} 

Теперь, если вы хотите его URL, вы сделали это правильно уже, но если вы только спасти себя от решений уверен, что это на все, выше путь. Затем вы можете просто проверить, что все контроллеры в пространстве имен Admin расширяют этот контроллер.