проверка подлинности с помощью форм, не может сохранять файл web.config программно - PullRequest
0 голосов
/ 24 февраля 2011

Я использую Visual Studio 2008. В моем проекте я использую аутентификацию форм, структура моего проекта выглядит следующим образом

root
 |
 login.aspx
 home.aspx
 web.config
 admin (folder)
  |
  admin.aspx
  web.config

здесь в корне web.config выглядит следующим образом

<authentication mode="Forms">
  <forms name="Authen" protection="All" timeout="60" loginUrl="Login.aspx" enableCrossAppRedirects="true" cookieless="AutoDetect"/>
</authentication>
<authorization>
  <deny users="?"/>
</authorization>

и во внутреннем web.config


и мои пользователи Имя пользователя Роль admin1 Admin admin2 Admin user1 Пользователь user2 пользователь

Как вы можете видеть, во втором файле web.config я дал доступ пользователям с ролью "Администратор" и пользователем "user1".

для предоставления доступа к папке "admin", я написал следующее:

        Configuration config = WebConfigurationManager.OpenWebConfiguration("~/HR");
        SystemWebSectionGroup systemWeb = (SystemWebSectionGroup)config.GetSectionGroup("system.web");
        AuthorizationSection section = (AuthorizationSection)systemWeb.Sections["authorization"];

        AuthorizationRule newRule = new AuthorizationRule(AuthorizationRuleAction.Allow);
        newRule.Users.Add("user1");
        section.Rules.Add(newRule);

и сохранил файл web.config как

        config.Save();

это работает нормально, когда я запускаю его с сервера разработки Visual Studio, когда я размещаю его в IIS, я получаю следующую ошибку

Ошибка конфигурации Описание: во время обработки файла конфигурации, необходимого для обслуживания этого запроса, произошла ошибка. Пожалуйста, просмотрите подробности конкретной ошибки ниже и измените файл конфигурации соответствующим образом.

Сообщение об ошибке анализатора: при загрузке файла конфигурации произошла ошибка: доступ к пути 'F: \ dotnet \ samples \ myproj \ UI \ hr \ f-q_g-yn.tmp' запрещен.

Ошибка источника:

[Нет соответствующих строк источника]

Исходный файл: F: \ dotnet \ samples \ myproj \ UI \ hr \ web.config Строка: 0

здесь проблема в том, что не удается сохранить web.config

у меня есть одно решение, то есть я добавил

<identity impersonate="true" userName="myusername" password="mypassword"/>

, чтобы получить root права на web.config, и он работает нормально. но мой босс говорит, что это не правильный путь. как правильно решить эту проблему ?? пожалуйста помогите

1 Ответ

2 голосов
/ 24 февраля 2011

Учетная запись, под которой работает ваш веб-сайт, не имеет разрешения на запись в каталог, в котором находится ваш web.config. Есть два варианта решения этой проблемы:

  1. Запустите веб-сайт под другой учетной записью имеет необходимые разрешения.Вы задаете учетную запись в настройках соответствующего пула приложений в IIS Manager.
  2. Измените настройки безопасности (ACL) каталога / каталогов и добавьте разрешения на запись для пользователя, под которым запускается пул приложений.

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

(Но обратите внимание, что я не уверендействительно ли веб-сайт изменяет свои собственные файлы web.config - это вообще хорошая идея.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...