我一直在学习如何使用 ASP.NET MVC4,并且一直在研究如何验证用户和用户角色以及使用实体框架将数据发布到 SQL。
但是,我无法找到任何指南/资源(也许我不知道正确的术语)来发布和检索特定用户独有的数据。例如,如果它是一个存储每个用户个人数据的站点,用户将如何只看到他们创建的条目。
尝试执行此操作时会使用哪些模式/设计?
我一直在学习如何使用 ASP.NET MVC4,并且一直在研究如何验证用户和用户角色以及使用实体框架将数据发布到 SQL。
但是,我无法找到任何指南/资源(也许我不知道正确的术语)来发布和检索特定用户独有的数据。例如,如果它是一个存储每个用户个人数据的站点,用户将如何只看到他们创建的条目。
尝试执行此操作时会使用哪些模式/设计?
为特定对象创建数据沙箱通常与身份验证相关联。您可以通过 ASP.Net 以多种方式访问这些内容。
首先,即使他们从未登录过,每个用户也会被识别出来。他们会获得一个会话标识符。它实质上为该用户在内存中创建了一个小空间,您可以在其中存储任何与用户相关的信息。将会话视为每个用户的围墙花园。
Session["UserFullname"]
这行得通,但意识到 Session 受时间限制,因此它非常不稳定。使用它,但不要依赖它。
下一个方法是验证用户。这是使用 Cookie 完成的,但通常由 ASP.Net Membership 或其他身份验证提供程序为您透明地处理。要访问经过身份验证的用户,您只需在控制器操作中使用简单的一行。
// User is the property
User.Identity.Name
这两种方法都可以存储有关您的用户的信息,您将使用这些信息来查询特定于他们的数据。
Select * From Orders Where UserId = *User.Identity.Name*
请注意,只要您在 Web 环境中,也可以通过 HttpContext.Current 访问 Session 和 User 。
HttpContext.Current.User
HttpContext.Current.Session
您不需要以这种方式访问它们,除非您不在 Controller 中,或者不在另一个尚未让您访问 HttpContext 的类中。我也不推荐这种方式,因为您的代码可以在 HttpContext 不可用的 Web 应用程序之外使用。
我希望这是有道理的,请随时问我问题。
这不是关于 mvc,而是更多关于将数据与特定用户相关联的问题。您必须问自己,您将如何向用户识别一条数据。
这样做的方法是以某种方式将数据与数据存储中的用户联系起来。在关系数据库中,您可以通过拥有一个 User 表并使用该表上的唯一键将数据插入另一个表(例如 Order)来执行此操作。然后订单将有一个用户 ID。
当用户登录时,您可以将该 ID 存储在会话中,并使用该 ID 根据该 ID 过滤掉订单。