2

根据用户所在的文件夹将用户重定向到登录页面。我有一个带有根目录的 Web 应用程序,所有用户和管理站点都使用它。

对于需要网站认证功能的人,他们需要登录并被重定向到 root/login.aspx。但是,当管理员需要登录到站点的 root/admin/ 部分时,我希望他们被重定向到 root/admin/login.aspx 上的登录表单

  <configuration>
      <appSettings/>
      <connectionStrings/>
    <system.web>
      <authorization>
        <deny users="?" />
      </authorization>
    </system.web>
  </configuration>

我在 root/admin 目录中有这个文件。我尝试添加以下行,但它给出了错误。

  <authentication>
    <forms defaultUrl="default.aspx" loginUrl="default.aspx"></forms>
  </authentication>

基本上我正在尝试覆盖主应用程序中存在的 defaulturl 和 loginurl。

4

1 回答 1

9

您需要<location>在 web.config 中使用该元素。您可以使用<location>标签将授权设置应用于单个文件或目录。

<location path="/root">
  <system.web>
      <authentication mode="Forms" >
        <forms name="LoginForm" defaultUrl="default.aspx" 
        loginUrl="/root/login.aspx" protection="Encryption" 
        timeout="30" path="/"/>
      </authentication>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>
<location path="/root/admin">
  <system.web>
    <authentication mode="Forms" >
      <forms name="formName" defaultUrl="login.aspx" 
      loginUrl="/root/admin/login.aspx" protection="Encryption"
      timeout="30" path="/"/>
    </authentication>
    <authorization>
      <allow users="?" />
    </authorization>
  </system.web>
</location>

MSDN

对于集中管理,可以在 Machine.config 文件中应用设置。Machine.config 文件中的设置定义机器范围的策略,也可用于使用<location> 元素应用特定于应用程序的配置。开发人员可以提供应用程序配置文件来覆盖机器策略的各个方面。对于 ASP.NET Web 应用程序,Web.config 文件位于应用程序的虚拟根目录中,也可以在虚拟根目录下的子目录中。

如果您想要 1 个登录位置和不同的访问级别,您可能需要使用角色

<location path="/root">
  <system.web>
    <authorization>
       <allow roles="admin,root" />/*admin, root is allowed */
       <deny users="*" /> 
   </authorization>
  <system.web>
</location>  

<location path="/root/admin">
  <system.web>
    <authorization>
       <allow roles="admin" />/*admin is allowed */
       <deny users="*" /> 
   </authorization>
  <system.web>
</location>  

用户可以属于多个角色。例如,如果您的站点是一个讨论论坛,则某些用户可能同时担任成员和版主的角色。您可以将每个角色定义为在站点上具有不同的权限,并且同时担任这两个角色的用户将拥有两组权限。

如果您想以编程方式操作角色/身份验证,您可以在代码级别访问所有这些元素

Page.User.Identity.Name
Page.User.Identity.IsAuthenticated
Page.User.Identity.AuthenticationType
Page.User.IsInRole("string");

教程

来自 Rolla 教程的 4 个人

揭秘 ASP.NET web.config 文件

于 2009-02-08T16:54:37.640 回答