2012-07-08 171 views
1

在我的應用程序中,我需要註冊用戶。用戶可以是以下任何一個:admin,client和general。他們有不同的屬性(管理員可能只有名字,客戶可能有公司地址等)。默認的MVC會員制方案沒問題,但如何在註冊時間內註冊更多信息呢?還是應該使用自定義會員資格?ASP.NET MVC3 /用戶註冊,成員資格,角色和權限

我需要記錄客戶和一般用戶clientIDgeneralID

回答

1

默認的MVC會員方案沒問題,但是怎麼能延長 在註冊時間內註冊更多信息?或者我應該使用 定製會員資格?

我想太多人,包括你自己,都期望從默認的ASP.NET成員提供者中獲得太多。它從來沒有被設計來處理應用程序特定的事情,例如你的客戶爲什麼工作的公司,你的管理員的名字等等。它的主要目的是存儲用於認證的密碼。

當然,密碼需要鏈接到一個用戶名,以便可以有一個2鑰匙認證對。有時您還需要用戶的電子郵件地址(與用戶名不同時),以便與用戶聯繫密碼。 但不要在會員店中存儲有關用戶的任何其他信息。將其存儲在您的應用程序數據庫中。

爲了在您的應用程序和成員資格提供程序之間連接數據,請將成員資格提供程序的UserName或ProviderKey用作其中一個數據庫表中的列。你最終會得到兩個沒有明確關聯的實體。您甚至可以將您的SqlMembershipProvider實現在與應用程序數據庫不同的數據庫中。即使它們位於同一個數據庫中,也應避免在任何提供程序表與應用程序表之間存在外鍵。這使得你擁有的東西和你「外包」給會員供應商之間的水域混淆不清。

您最終得到了2個用戶的物理隔離表示。一個是MembershipProvider,其中包含用戶的密碼。另一個是您的應用程序,其中包含其他業務特定的詳細信息。這兩者僅在您的應用程序中邏輯關聯。使用成員資格API對用戶進行身份驗證後,其用戶名和/ pr ProviderKey將變爲可用於您的應用程序。然後,您可以使用該數據查詢您的應用程序數據庫並獲取更多詳細信息。這是你可能會提到的東西,如clientIDgeneralID

如果你看看System.Web.Security.Member * API,這應該讓事情更清楚。它確實做了一件事 - 將用戶與密碼和其他與密碼重置相關的信息(如電子郵件地址,問題和答案等)關聯起來。因此外包只是密碼提供商,並依靠您的應用程序來做重要的事情。

0

我強烈建議創建您自己的會員角色。它很簡單,沒有任何東西可以打敗你自己實現的靈活性。

這裏是我做了一段視頻顯示回你如何一步一步來實現這一目標:

http://www.youtube.com/watch?v=BsxUsyMSGeA

是,你創建自己的AuthorizeAttribute並創建自己的角色,它的要點;保護每個控制器甚至是單個Action方法。

此方法的一個缺點是您可以確定用戶在系統中具有的角色,但不能確定角色在系統中可以執行的操作。那有意義嗎?

如果需要編輯角色在運行時可以執行的操作,還有其他選擇。

+0

這是去角色的絕對最差的方式。問題是它沒有在.NET IPrinicipal系統中集成,所以使用像User.Identity.IsInRole這樣的東西將不起作用。你應該改爲實現一個IIdentity接口,然後默認屬性可以無縫地工作,就像檢查用戶所處的角色一樣。 – 2012-07-08 19:26:33

+0

@MystereMan:我不同意,除了使用它適合的地方以外,沒有什麼好的結果。我不得不重寫某些功能,併爲我的用戶提供一個功能強大,靈活的基於角色的安全系統。 – 2012-07-08 20:02:15