2012-01-17 4 views
0
<authentication mode="Windows"/> 
     <authorization> 
      <allow users="USERS"/> 
      <allow roles="ROLES"/> 
      <deny users="*"/> 
     </authorization> 

Есть ли способ написать здесь инструкцию if, чтобы определить, какой url я включен, поэтому я могу разрешить определенную роль для этого определенного URL-адреса.Настройка разных ролей в зависимости от url в web.config

Пример кода в моей голове, что я как бы хочу видеть:

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 для каждого, как я могу это настроить?

+0

Что вы делаете для строк подключения? (Я предполагаю, что у вас есть другая база данных для каждого приложения) – davidsleeps

+0

@davidsleeps У меня есть три отдельных строки подключения. Один для каждого – Samjus

ответ

2

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

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

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

+0

Примечание: вместо добавления этого в основной файл web.config вы можете поместить другой файл web.config в каждую затронутую подпапку с соответствующими требованиями разрешения. – NotMe

+0

@ Крис, может быть, я не прочитал это правильно ... Повторно прочитав это, это все равно будет работать, если, конечно, у него много ролей и необходимо определить их для каждой возможной роли ... – davidsleeps

1

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

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

1

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

В Visual Studio это выглядит следующим образом:.

web.config transform files

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

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

Затем вы можете щелкнуть правой кнопкой мыши файл 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> тег. Это произойдет, когда вы опубликуете веб-приложение (щелкните правой кнопкой мыши и выберите Publish ...), например, в папку на вашем рабочем столе для передачи по FTP на сервер UAT.

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

+0

Я должен позволить вы знаете, что я использую Visual Studio 2005. – Samjus

+0

Ах, слишком плохо, это хорошая функция. До этого мы использовали таблицы стилей XSLT для преобразования файлов web.config с помощью [процессора командной строки] (http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21714). Не интегрирован в Visual Studio, хотя вы можете добавить его как задачу в MSBuild. –

Смежные вопросы