2011-11-23 36 views
0

我已經被賦予了將asp系統更新爲MVC3的任務。我的主要問題是當前的系統有兩種不同的用戶,每個用戶都有自己的用戶表,而在當前的asp網站中,每個用戶都由許多不同的會話保持變量來定義。處理多用戶類型系統的最佳方式是什麼?

,因爲其他系統使用兩種不同的用戶表,我無法將它們合併。那麼最好的方法是什麼?

我初步想到讓他們在系統中分開;每個用戶擁有一個類別類型,它保存着與他們的asp相對應的單獨變量。在登錄時,我可以將用戶類型推送到auth cookie中的userdata,然後在IPrincipal上創建一個擴展方法,以便在需要時返回用戶類型。

這種感覺一個黑客位,並作爲用戶將可以觀看同一頁面,會有很多重複的代碼。

它會更好的用戶信息庫這將附上一個角色一個共同的用戶對象這將識別系統中的用戶類型之前建立某種形式的門面?然後,我可以檢查該角色,並在需要時提取曾用於存儲在會話變量中的數據。

+0

如果*我*從頭開始構建這個應用程序,我會根據角色區分用戶類型。考慮到這一點,我已經在用戶構建器和代表之間創建了一個反腐敗類。這會注入/刪除角色(ID爲0)以區分用戶類型。將來,客戶希望合併表格,所以這似乎是目前最明智的方式。 –

回答

0

如果我是建設從地上爬起來這個應用程序,我會按角色區分用戶類型的方法。考慮到這一點,我已經在用戶構建器和代表之間創建了一個反腐敗類。這會注入/刪除角色(ID爲0)以區分用戶類型。將來,客戶希望合併表格,所以這似乎是目前最明智的方式。

0

如果我有機會做到這一點我會做的方式如下:

  1. 實現asp.net成員資格提供並導入所有用戶到它。
  2. 爲用戶類型創建兩個不同的角色
  3. 使用配置文件提供存儲從用戶類型表的其他屬性。

這樣,您可以使用角色和配置文件的組合來處理任何與授權和限制相關的情況。

+0

嗨Prashant,我理想喜歡這樣做,但我需要使用現有的表格,不能以任何方式修改它們 - 這是合同的規定。 –

+0

好的,你需要一個小技巧來擴展提供者從你的表中讀取數據。我相信他們是可擴展的,你可以得到一些很好的例子。 –

0

我會定義與常見的兩種方法的用戶界面,並有兩種用戶類型實現的接口。所以,如果你有這樣的:

interface IUser { bool CanViewPage1(); } 
class UserType1 : IUser { } 
class UserType2 : IUser { } 

Session["user"] = new UserType1(); 

然後,你可以這樣做:

var user = (IUser)Session["user"]; 

對於常見的操作:

if (user.CanViewPage1()) 
{ 
    ... 
} 

,並在您需要的用戶對象操作:

bool CanViewPage2(IUser user) 
{ 
    if(user is UserType1) 
    { 
     var ut1 = (UserType1)user; 
     ... 
    } else if (user is UserType2) 
    { 
     var ut2 = (UserType2)user; 
     ... 
    } 
} 

最後一部分可以b正如你所說,也可以通過擴展方法完成。

0

我建議使用WIF自定義簡單的STS服務器,並使用用戶類型的聲明。 http://msdn.microsoft.com/en-us/library/ee748475.aspx

並檢查這個東西 - 使用自定義屬性,或簡單 - Identity.HasClaim(「someclaim名稱或類型」)。

而且這將standartize您的認證/授權,可以在以後節省一些時間=)

相關問題