【问题标题】:What is the best way to check a user's permissions while they are browsing through your website?在用户浏览您的网站时检查用户权限的最佳方法是什么?
【发布时间】:2012-12-09 07:37:43
【问题描述】:

我对 asp.net 相当陌生,很难找到有关此主题的信息。

我正在建立一个允许用户上传视频的网站。例如,如果视频不合适或离题,我可以暂停他们的帐户,以便他们下次登录时,他们将被重定向到“您的帐户已被暂停”页面。我想弄清楚的是处理以下情况的最佳方法是:我在用户刚刚登录后暂停了用户的帐户。所以他们在登录过程中已经通过了验证。我基本上希望用户在执行下一个操作后被重定向到“您的帐户已被暂停”页面。除了在每次回发时检查数据库(这似乎有点低效),处理这个问题的最佳方法是什么?

如果您需要更多信息或更好的示例,请告诉我。

谢谢你的帮助

【问题讨论】:

  • 完全不熟悉 asp.net,所以我不知道这个建议是否适用,但是当您暂停用户时,我会清除用户的所有活动会话数据。这将有效地将它们在下一页加载时注销。
  • 我只会在每次回发时检查数据库。我认为与回发所需的时间相比,效率低下可以忽略不计。
  • 如果你想对每个请求进行检查,HTTP 模块可能是最简单的选择:support.microsoft.com/kb/307996
  • (David Brunow) - 到目前为止,这似乎是要走的路。 (Richard) - 我对 HTTP 模块一无所知,所以我必须自学该主题。

标签: asp.net security validation authentication permissions


【解决方案1】:

这是我的方法。创建一个新的BasePage 并从此类而不是 System.Web.UI.Page 继承您的 aspx 页面。

public class BasePage : System.Web.UI.Page
{
   protected override void OnInit(EventArgs e)
   {
      if (!IsPostBack)
      {
         // I assume you already get the user's profile
         if (User.IsSuspended)
           Response.Redirect("/SuspendedPage.aspx");

         base.OnInit(e);     
      }    
   }
}

更新:

在整个应用程序生命周期中存储值的方法有很多。这是其中之一。

// Global.asax.cs
void Application_AuthenticateRequest(object sender, EventArgs e)
{
   if (HttpContext.Current.User != null && 
      HttpContext.Current.User.Identity.IsAuthenticated)
   {
      HttpContext.Current.Items["User"] = 
         GetUserByUsername(HttpContext.Current.User.Identity.Name);
   }
}

【讨论】:

  • 这类似于我检查用户是否登录的方式。我使用所有用户页面都基于的母版页,并检查页面加载事件。如果 User.MemberID = 0 则 Response.Redirect("sign-in.aspx")。使用您的示例,如何以及何时填充 User.IsSuspended 属性?
  • 我不担心用户通过身份验证后在哪里存储信息。它在成功验证后通知用户他们已被暂停。例如,用户登录,帐户为“活动”。用户搜索要观看的视频,(用户帐户仍处于“活动状态”)。然后我将他们的帐户状态更改为“暂停”。然后,用户搜索更多要观看的视频,但被重定向到“您的帐户已被暂停”的页面。我可能只是在每次回发时检查他们在数据库中的状态,否则在他们注销然后重新登录之前暂停不会生效。
  • Application_AuthenticateRequest 是您所需要的。它在每个页面请求时触发。
猜你喜欢
  • 2011-10-28
  • 2012-03-22
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 2012-09-11
相关资源
最近更新 更多