Установка разных ролей в зависимости от URL в web.config - PullRequest
0 голосов
/ 18 января 2012
<authentication mode="Windows"/>
        <authorization>
            <allow users="USERS"/>
            <allow roles="ROLES"/>
            <deny users="*"/>
        </authorization>

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

If (UCase(Url) = UCase("URL")) Then
<allow roles="ROLES"/>
ElseIF(UCase(Url) = UCase("URL")) Then
<allow roles="ROLES"/>
ElseIF (UCase(Url) = UCase("URL")) Then
<allow roles="ROLES"/>
End If
<deny users="*"/>

Это вообще разрешено в web.config?Если это не так, как я могу это сделать?

У меня есть 3 веб-сайта.Один для Dev, UAT и PROD.Теперь для каждого сайта у меня есть разные группы пользователей для каждой настройки.Я просто хочу найти способ, которым я могу просто найти, по какому URL я нахожусь, и указать его на определенную группу пользователей.Я предполагаю, что я должен сделать web.config для каждого, потому что вы не можете делать условные заявления, но я просто проверяю.Если мне нужно сделать web.config для каждого, как я могу настроить это?

Ответы [ 4 ]

2 голосов
/ 18 января 2012

Изменить (изменил весь ответ, так как я думаю, что ваша проблема теперь другая)

Ваш лучший вариант - иметь разные параметры конфигурации в каждом файле web.config, как и в web.configфайлы для.Возможно, вам придется взглянуть на процесс развертывания, если вы каждый раз развертываете файл web.config (вручную или автоматически).

Другой вариант - вместо этого приложение будет выполнять авторизацию, зная, в какой среде оно работает.и отказ в доступе с помощью кода.Этот путь, очевидно, представляет собой больше работы, чем то, что уже было предоставлено, но это вариант.

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

Если вы развертываете одно и то же веб-приложение в различных средах, то вы можете рассмотреть возможность использования преобразований web.config.При таком подходе у вас может быть специальный файл для каждой среды, который будет принимать файл разработки по умолчанию web.config и изменять только определенные значения, в вашем случае тег <authorization> (или, возможно, также <connectionStrings> или<appSettings> тегов, если хотите).

В Visual Studio это выглядит так:

web.config transform files

Это работает только для проектов веб-приложений,не для проектов веб-сайтов () и только в Visual Studio 2010 и более поздних версиях. *

Сначала необходимо создать конфигурацию решения для каждой среды.В главном меню выберите Build > Configuration Manager.Здесь вы можете управлять каждой конфигурацией.По умолчанию у вас будет Debug и Release , вы можете добавить, например, конфигурации UAT и Production для вашего решения.

Затем вы можете щелкнуть правой кнопкой мыши файл web.config в своем проекте веб-приложения и щелкнуть Добавить преобразования конфигурации , и вы найдете новое преобразование для каждой конфигурации:

web.config
  web.Debug.config
  web.Production.config
  web.Release.config
  web.UAT.config

Теперь вы должны написать преобразование, в вашем случае это будет выглядеть так (для web.UAT.config):

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
    <authorization xdt:Transform="Replace">
      <allow roles="USER-ACCEPTANCE-TEST" />
      <deny users="*" />
    </authorization>
  <system.web>
</configuration>

Обратите внимание, как мы указываем преобразованию заменить тег <authorization>полностью.Это произойдет при публикации веб-приложения (щелкните правой кнопкой мыши и выберите Опубликовать ... ), например, в папке на рабочем столе для передачи по FTP на сервер UAT.

См.здесь для некоторых учебных пособий:

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

В качестве альтернативы (и в большинстве случаев лучше) вы должны поместить дополнительные файлы web.config в ваши подпапки - тогда сама папка определяет, кто может получить к ней доступ. В этих файлах web.configs все, что вам нужно, это раздел аутентификации, который переопределит аутентификацию родительской папки.

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

0 голосов
/ 23 февраля 2019

Замените на вашем рольеManager следующим образом:

<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...