表单身份验证,无法以编程方式保存web.config

时间:2011-02-24 10:06:12

标签: asp.net forms authentication

即时通讯使用visual studio 2008.在我的项目中使用表单身份验证,我的项目结构如下

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

这里的root 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管理员 admin2管理员 user1用户 user2用户

正如您所看到的那样,在第二个web.config中,我为具有“Admin”角色和“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 个答案:

答案 0 :(得分:2)

您网站运行的帐户无权写入您的web.config所在的目录。有两种方法可以解决这个问题:

  1. 具有所需权限的其他帐户下运行您的网站。您可以在IIS管理器中的相应应用程序池的设置中设置帐户。
  2. 修改目录/目录的安全性建立(ACL),并为运行应用程序池的用户添加写入权限。
  3. 您可能应该将这两种方法结合使用 - 使用单独的用户帐户并仅将写入权限添加到此帐户,而不是例如网络服务。

    (但请注意,我不确定网站是否修改自己的web.config文件是一个好主意。)