Как я могу запретить анонимный доступ к пути во время выполнения - PullRequest
0 голосов
/ 24 января 2012

У меня есть многоязычный веб-сайт .Net 4 (www.example.com/en/, www.example.com/fr/ и т. Д.), И у каждого языка есть личный кабинет, например, www.example.com/ru / members / и www.example.com/fr/members/

CMS (Umbraco) контролирует языковые ветви и контент и, следовательно, может добавлять и удалять их.Это означает, что я не могу использовать разделы <location> в корневом web.config для запрета анонимного доступа к каждой ветви участников, так как они могут быть опубликованы после запуска приложения.

Есть ли способ добавить ConfigurationLocation раздел к свойству Locations экземпляра System.Configuration.Configuration после запуска приложения, без перезапуска приложения?В качестве альтернативы, есть ли более гибкий способ управления доступом к пути во время выполнения?

Ответы [ 2 ]

1 голос
/ 24 января 2012

В качестве альтернативы, есть ли более гибкий способ управления доступом к во время выполнения?

Вы можете расширить все защищенные страницы с BasePage, который имеет что-то подобное внутри Page_Load event

if(!HttpContext.Current.User.Identity.IsAuthenticated)
   Response.Redirect("Login.aspx");

Обновление

Если вы не знаете, какие страницы будут защищены, измените мой код выше, чтобы прочитать страницы, которые необходимо защитить из таблицы базы данных, и сравнить текущее имя страницы с теми, которые содержатся в списке из таблицы. , Например, вы можете перехватить список и автоматически завершать кэш каждые 20 минут. По крайней мере, вы сможете пометить страницу как безопасную без перезапуска приложения, сохраняя некоторую гибкость, поскольку вам не нужно заранее знать, какие из них должны быть безопасными.

0 голосов
/ 28 января 2012

Решением, которое я использовал, было создание HttpModule. Но с помощью HttpModule в umbraco вы не можете легко получить currentNodeId, поскольку он добавляется как часть другого процесса.

Модуль выполнил следующие проверки события PostAuthenticateRequest:

  1. Является ли запрошенный путь зарезервированным путем в umbraco?
  2. Аутентифицирован ли уже пользователь?

Если оба они вернули false

  1. Используя домен запроса, я получил идентификатор корневого узла, найдя узел с соответствующим ассоциированным доменом;
  2. Затем я создал запрос xpath, используя части запрошенного пути, но он существовал под узлом с идентификатором, полученным выше. Этот запрос дал мне текущий узел;
  3. Затем я проверил, существует ли текущий узел как потомок узла, помеченного как требующий аутентификации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...