asp.Net c#站点.Master -排除默认值.aspx页面

本文关键字:排除 默认值 aspx 页面 Master Net 站点 asp | 更新日期: 2023-09-27 18:19:09

假设有两种类型的用户:普通用户(项目中未指定的用户)和管理员(在安全角色中定义)。我有一个c# web应用程序项目,遵循一个网站。Master用于布局和安全角色(Admin only access)。

然而,我想使默认。aspx页面同时对管理员和普通用户打开。目前,如果您是普通用户并尝试访问Default。您将被重路由到"AccessDenied. aspx"。

  1. 是否有一种方法可以在相同的网站。仅Default.aspx的母版页?我还是选1吧主页,还是要参考原来的"网站"。大师"这样我就不用复制布局了,等等

  2. 如果有,是否也可以让普通用户只看到默认值。aspx页面的菜单上有一个"Home"链接(而管理员会看到主页,管理员等其他选项卡下拉)?

在后面的代码中,我通过检查访问页面的用户的安全角色来处理到Access Denied页面的重路由。有没有办法说"如果用户是默认的。"

asp.Net c#站点.Master -排除默认值.aspx页面

我认为将安全性与MasterPage混合并不是一个好主意——.NET有很好的安全性框架,那么为什么不利用它呢?假设模式如下:

  • 登录用户可以看到Default.aspx
  • admins可以看到/Admin文件夹下的任何内容
  • 已登录用户无法看到/Admin文件夹
  • 匿名用户只能看到

web . config:

<location path="Admin">
  <system.web>
    <authorization>
      <allow roles="Admin"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>
<location path="Default.aspx">
  <system.web>
    <authorization>
      <deny users="?"/>
      <allow users="*"/>
    </authorization>
  </system.web>
</location>
<system.web>
  <authentication mode="Forms">
    <forms loginUrl="Login.aspx" defaultUrl="Default.aspx" cookieless="UseCookies" />
  </authentication>
  <anonymousIdentification enabled="true"/>
  <roleManager enabled="true" defaultProvider="MyRoleProvider">
    <providers>
      <add name="MyRoleProvider" type="MyNamespace.MyRoleProvider, WebApplication1"/>
    </providers>
  </roleManager>
  <membership defaultProvider="MyMembershipProvider">
    <providers>
      <add name="MyMembershipProvider" type="MyNamespace.MyMembershipProvider, WebApplication1"/>
    </providers>
  </membership>
</system.web>

MyMembershipProvider,MyRoleProvider类:

namespace MyNamespace {
  public class MyMembershipProvider : System.Web.Security.MembershipProvider {
    // override at least ApplicationName, CreateUser and ValidateUser 
    // you can throw NotImplementedException for rest
  }
  public class MyRoleProvider : System.Web.Security.RoleProvider {
    // override at least GetAllRoles(), GetRolesForUser() and RoleExists
    // you can throw NotImplementedException for rest
  }
}

登录。aspx:

// after validation that username&password is correct call
FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chxRememberMe.Checked);

恭喜你-现在你已经连接到标准的。net web安全提供程序模型。现在你可以这样享受了:

<asp:LoginView ID="MasterLoginView" runat="server">
  <AnonymousTemplate>
    Welcome: Guest
  </AnonymousTemplate>
  <LoggedInTemplate>
    Welcome:
   <asp:LoginName ID="MasterLoginName" runat="server" />
  </LoggedInTemplate>
</asp:LoginView>

<asp:LoginView ID="MasterLoginView" runat="server">
  <RoleGroups>
    <asp:RoleGroup Roles="Admin">
      <ContentTemplate>
        Welcome mighty admin
      </ContentTemplate>
    </asp:RoleGroup>
  </RoleGroups>
</asp:LoginView>

另外,如果你使用Sitemap提供商的网站链接,当你启用安全修剪。net将使用这个提供商来计算哪些链接可以显示给用户,等等