【发布时间】:2011-08-03 14:35:28
【问题描述】:
我正在为我的第一个 ASP.NET MVC 3 应用程序使用表单身份验证,因此有一个用于登录站点的 dbo.aspnet_Users 表以及管理角色和角色分配的 dbo.aspnet_Roles 和 dbo.aspnet_UsersInRoles 表分别。
数据库是 SQL Server。
此外,我的应用程序数据库中有一个用户表,其布局如下:
UserID (PK, int, not null)
Name (varchar(50), not null)
Phone (varchar(45), null)
Location (varchar(45), null)
UserID PK 作为外键用于各种其他表,用户列表(例如,来自特定位置的用户)被检索并显示在我的网站页面上的下拉列表等中。
我遇到的问题是,当我登录页面时,我想显示一个特定于用户的列表,例如,我创建的最新食谱,虽然我可以从下拉列表中选择自己来获取用户 ID,但我'希望它与我的登录 ID 相关联。
我不确定我是否有一个很好的解决方案。我的一个想法是在我的应用程序的数据库中创建一个查找表,将我的应用程序用户表中的用户 ID 映射到 aspnet_Users 表中的 GUID,类似于
UserGUID(PK, uniqueidentifier, not null )
UserID(PK, int, not null)
然后检索 GUID(还不确定如何),查找它并使用关联的 UserID 来“知道”我是哪个用户。我希望这是有道理的。
有人遇到过类似情况吗?你会如何解决这个问题?
更新:
我目前的方法是在我的应用程序的用户表中添加一个 UserGUID 列(唯一标识符),然后我创建了一个看起来像这样的 BaseController:
public abstract class BaseController : Controller
{
public Guid UserGuid { get; set; }
public int UserID { get; set; }
protected BaseController()
{
try
{
UserGuid = (Guid)Membership.GetUser().ProviderUserKey;
var db = new IceCreamEntities();
UserID = db.Users.Where(m => m.UserGUID == UserGuid).First().UserID;
}
catch (NullReferenceException)
{
UserGuid = Guid.Empty;
UserID = 0;
}
}
}
我让我的各种控制器继承了 BaseController 而不是 Controller,因此它们作为基础构造函数的一部分获得了该功能。然后在我需要使用 UserID 填写字段的控制器操作中,我可以这样做:
[HttpPost]
public ActionResult Create(IceCreamFlavorViewModel viewmodel)
{
...
flavor.CreatedBy = this.UserID;
...
}
到目前为止似乎工作正常,但我仍然对其他人如何解决这个问题感兴趣。
【问题讨论】:
标签: asp.net-mvc