ASP.NET MVC: ограничение доступа с помощью URL-адреса

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

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


person ajbeaven    schedule 02.09.2009    source источник


Ответы (3)


Нашел ответ в книге Стивена Сандерсона 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/*, приложение будет отказывать в доступе посетителям, не прошедшим проверку подлинности, или любым другим посетителям, кроме тех, у кого есть роль «Администратор».

person ajbeaven    schedule 02.09.2009

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

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

person Chris Arnold    schedule 03.09.2009
comment
Так есть ли преимущества в использовании URL для авторизации? - person ajbeaven; 04.09.2009

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

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

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

person neouser99    schedule 04.09.2009