2013-08-16 65 views
0

我正在尋找一種方法來實現一個使用.NET類的登錄系統,比如WebSecurity,因爲它們的使用看起來就像海峽一樣。我需要不同角色的登錄系統,我使用EF代碼第一種方法MVC 4.MVC 4個角色的特定列

問題是我不知道我應該如何代表不同角色的用戶。 這裏是一個例子:

會員是普通註冊用戶。他用戶名密碼電子郵件地址名稱等。他還可以訂購的東西。

聯繫僅僅是管理員,他有一些共同點與成員一樣用戶名密碼,但他沒有地址名稱,不能訂購的東西。另一方面管理員可以發佈消息。

我可以簡單地把所有這一切放在一個名爲User的類中,並且對於管理員和成員都有很多空值,但我認爲這是非常愚蠢的做法。

我也可以看到我可以有兩個不同的類成員和管理員沒有彼此相關。但它不是我的選擇,因爲我想使用.NET中實現的角色。

(即來到了我的腦海裏最後認爲,從一些基類繼承,但我不知道是否可以做,有關係型數據庫作爲一個結果。)

所以我是什麼要求是在MVC 4中創建模型的一種標準或/和聰明的方式,我可以通過它與WebSecurity連接並使用它提供的所有特殊方法。

在此先感謝

回答

0

首先,我建議使用名稱爲「客戶」,而不是「會員」的客戶是更準確的描述 - 我被「秩序假設事情「,你正在與店面打交道。

public abstract class User 
{ 
//All of the shared properties go here 
} 

public class Customer : User 
{ 
//Customer specific properties 
} 

public class Admin : User 
{ 
//Admin specific properties 
} 

這是基本的多態性,而實體框架可以很好地處理它。標記User類摘要向EF表明您不會存儲僅爲用戶的對象。

0
​​

創建一個單一的用戶用戶名,密碼,電子郵件地址,姓名,TypeOfUser

電子郵件,地址,姓名,姓氏,將接受null

然後你可以查詢個用戶表,並根據列TypeOfUser可以實例用戶羣會員

更新或插入用戶羣則列電子郵件,地址,名字,姓氏時,會設置爲空,否則他們將有會員屬性的值

1

你會想至少有四個表做到這點:

  1. UserProfile - 這將包含用戶名,電子郵件,名稱等,該密鑰將是一個唯一的標識符。 (我通常使用Int)
  2. MemberData - 這將包含密碼(當然散列)和登錄信息(密碼重置,確認密鑰等)。這些分離有兩個原因。 1)編輯UserProfile不會影響登錄。 2)解耦登錄數據。您現在可以讓您的用戶使用用戶名或電子郵件地址登錄,而無需更改您的基礎架構。該表的關鍵是與他們的UserProfile關鍵字相關的外鍵表
  3. 角色 - 這將包含您的角色數據。所有需要的是一個Id(Unique Int)和一個名稱。
  4. UsersInRoles - 此表將包含兩列:UserId和RoleId。通過這種方式,可以根據需要爲用戶分配儘可能多的角色或儘可能少的角色。

例子:

UserProfile: 
Id Username Email 
1  user  [email protected] 

MemberData: 
Id Password LastLogin 
1 Tx8gke08 08-16-2013 

Roles: 
Id Name 
1 User 
2 Admin 

UsersInRoles 
UserId RoleId 
1   1 
1   2 

側面說明: 的網絡安全框架已經包含了一個辦法做到這一切。 Roles class包含創建,刪除和添加用戶的方法。它也是使用默認MVC 4項目創建的安全包的標準部分。

0

1)創建兩個角色AdminMember。對於Admin角色,你需要什麼,但Member你應該繼承 2)創建類會員:

public class Member 
{ 
public int memberid {get; set;} 
public Guid UserId {get; set;} 
public string name {get; set;} 
public string phone {get; set;} 
..... 
} 

正如你可能會看到,你只需要通過Guid UserId將其與asp_net User class連接。每當您在角色Member中使用User時,您可以通過UserIDMember class獲取更多信息。

從用戶類使用存取權限UserID屬性:

var user = Membership.GetUser(); 
Guid currentUserID = (Guid)user.ProviderUserKey;