2011-08-03 54 views
0

我對我的第一個ASP.NET MVC 3應用程序使用表單身份驗證,所以有一個dbo.aspnet_Users表用於登錄到站點和dbo.aspnet_Roles和dbo.aspnet_UsersInRoles表中管理角色和角色分配。用戶表ID和sqlmembershipprovider

數據庫是SQL Server。

此外,我有我的應用程序的數據庫用戶表具有佈局是這樣的:

UserID (PK, int, not null) 
Name (varchar(50), not null) 
Phone (varchar(45), null) 
Location (varchar(45), null) 

即用戶名PK用於各種其他表的外鍵和用戶的列表,例如,從特定的位置檢索並顯示在我的網站的頁面中的下拉列表等。

斷開連接我是當我登錄到頁面時,我想顯示一個用戶特定的列表,例如,我創建了最新的食譜,雖然我可以從下拉列表中選擇自己以獲取用戶標識,但我希望將它與我的登錄關聯起來D.

我不知道我有一個非常好的解決方案。我有一個想法是建立在從我的應用程序的用戶表我的應用程序的數據庫映射用戶ID查找表中aspnet_Users表格內的GUID,像

UserGUID(PK, uniqueidentifier, not null) 
UserID(PK, int, not null) 

,然後檢索GUID(不知道如何還),查看並使用關聯的用戶ID來「知道」我是哪個用戶。我希望這是有道理的。

任何人都面臨類似的情況?你會如何解決這個問題?


更新:

我目前的做法包括增加一個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而不是控制器,所以他們獲得作爲基地的構造函數的一部分的功能。然後在我的控制器操作,我需要填寫一個字段用戶ID,我可以做到這一點:

[HttpPost] 
public ActionResult Create(IceCreamFlavorViewModel viewmodel) 
{ 
    ... 

    flavor.CreatedBy = this.UserID; 

    ... 
} 

似乎好工作至今,但我仍然有興趣在別人將如何解決這個問題。

回答

2

我在我的mvc應用程序中使用了相同的技術,並且在過去的一年中工作正常。然而,如果你在開發過程中沒有走過那麼遠,你可能會考慮另一種方法。您可以考慮使用ProfileProvider來存儲用戶特定的信息,而不是滾動您自己的系統。 PLZ在以下鏈接
http://odetocode.com/articles/440.aspx
http://www.vbforums.com/showthread.php?p=3352498
Implementing Profile Provider in ASP.NET MVC

+0

感謝資訊穆罕默德看看,我會看看他們。 – itsmatt

+0

你最歡迎itsmatt –

相關問題