ASP.NET MasterPage用于授权目的

时间:2013-04-18 10:08:02

标签: asp.net master-pages

我正在使用母版页进行授权。我有三种不同的用户类型:读者,作者和管理员。

我有Main.Master,其中包含我网页的基本内容。然后我有,

  1. Reader.Master
  2. Author.Master
  3. Admin.Master
  4. 这些继承自Main.Master。我正在检查用户是否真的已登录(Session不为空),UserType是否为Reader.MasterAuthor.MasterAdmin.Master s {{ 1}}函数。

    第一个问题:这是一个好习惯吗?请注意,我没有使用其他ASP.NET内置函数进行用户管理,授权等的经验。

    第二个问题:有一些页面如Page_Init()所有ForgotPassword.aspx应该访问同一页面。在我的结构中,我需要创建从三个不同的Master继承的三个不同的页面。如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

第二个问题:有一些页面像ForgotPassword.aspx,所有UserTypes都应访问同一页面。在我的结构中,我需要创建从三个不同的Master继承的三个不同的页面。如何解决这个问题?

以相同的方式创建User.MasterGuest.Master,您将获得所有类型用户的主人。 User.Master仅检查用户是否已登录。

答案 1 :(得分:1)

第一个问题:我使用它类似。我不确定它是否是一个很好的解决方案,但它对我有用。

第二个问题:您可以在母版页中定义ContentPlaceHolder

<asp:ContentPlaceHolder ID="MyId" runat="server" />

在您的aspx网站中,为每个ContentPlaceHolderContent容器定义。

<asp:Content ContentPlaceHolderID="PageContent" runat="server">
    <!-- content for this area -->
</asp:Content>

如果您使用相同的ContentPlaceHolder在三个用户类型母版页ID中定义,则可以在Forgot.aspx等页面中使用每个母版页的相同内容。

答案 2 :(得分:1)

好吧,如果不是最佳做法,主页中的身份验证是可以接受的。我看过很多从这种教程开始的书。但是,当您的网站扩展时,您可能会遇到一些问题,同时处理除了haldler或global.asax等页面以外的身份验证相关数据可能会很痛苦。

但是当网站范围有限且您不需要高级功能时,这种身份验证就可以了。

关于你的第二个问题然后是你得到的是所用方法的副作用。您可以做的是使用三个主页中的任何一个创建一个页面。在您正在检查身份验证的母版页中,您将获得该页面的名称,以及页面名称是否与forgot.aspx相同,或者只是忽略了正常过程。

例如

if (System.IO.Path.GetFileName(Request.PhysicalPath).ToLower() == "forgot.aspx")
{

}
else
{
    doauthentication();
}

答案 3 :(得分:0)

只需将其设置为不带母版页的普通Web表单页面,用户如果忘记密码就无法登录,您只需要向他们显示一个普通页面(如登录页面)