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