2013-02-05 33 views
4

我試圖使用MVC 4的簡單成員資格提供程序作爲「通過本書」儘可能。以下是目前的場景:簡單的成員資格提供程序 - 實體框架和角色

- 我一直在使用Jon Galloway的博客文章here

1)我知道這件事通過實體框架連線。但是,我注意到,當我向UserProfile類添加屬性時,它們在生成時不會自動出現在表中。這是由於數據庫已經生成(表格不存在)?我手動添加了這些字段並且它是有用的,但是很高興知道會導致字段不被自動創建的「陷阱」。 2)就角色而言,它似乎主要面向全局權限類型的事物(即用戶是用戶,管理員等)。如果您想在項目級別進行處理(例如,管理項目1,項目2的用戶),需要進行哪些修改?

etc)有沒有一篇文章真正詳細說明如何擴展它的最佳實踐?

+0

你應該在這個主題上找到很多帖子。例如http://stackoverflow.com/questions/14672205/code-first-membership-provider/14672293#14672293 –

+0

你究竟想做什麼。使用SimpleMembership,但擴展Db? –

+0

UserProfile對象具有UserId和UserName。我添加了電子郵件,姓名(全名)和IsLockedOut。無論出於何種原因,這些屬性在生成表格時都不會在數據庫中創建字段。我能夠通過手動創建這些列來解決這個問題,只是好奇他們是否有一個原因(不能在WebSecurity方法中查看源代碼是否合理)。角色表是id和角色,但試圖將其切換到id,項目,角色。目前認爲我需要避免內置的角色添加/檢查功能,並建立檢查,而不是按照慣例。 – Robert

回答

5

1)我發現SimpleProfile表的Simple Membership的一部分有點複雜(以一種很好的方式),但它對我的應用程序非常有用。

簡單成員的約定是創建一個名爲「UserProfile」的UserProfile表,具有兩個字段UserId和UserName。您可以通過修改Filters/InitializeSimpleMembershipAttribute.cs中的WebSecurity.InitializeDatabaseConnection()行來爲UserProfile配置不同的表名稱或不同的UserId和UserName字段名稱。您可以使用其他字段創建UserProfile表,如果簡單成員資格首次發現該表,它將被簡單成員使用。在默認配置下,首次運行SimpleMembership的應用程序將創建數據庫表,包括Filters/InitializeSimpleMembershipAttribute.cs中指定的任何UserProfile表詳細信息。

所以,訣竅是在首次調用Simple Membership之前創建所需的UserProfile表(包括該表中所需的所有字段)。這可以由EF Migrations創建,也可以由數據庫腳本創建,甚至可以在SSMS中手動創建。

如果您想深入瞭解簡單會員代碼,請參閱http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/WebSecurity.cshttp://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleMembershipProvider.cs

2)我同意你關於角色和全局權限的觀點。也許你可以使用AddUsersToRoles和RemoveUsersFromRoles(在http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleRoleProvider.cs)根據他們使用的項目在登錄時修改用戶的角色。

等)我不知道擴展簡單成員的好文章,但原則上簡單成員擴展了擴展ASP.NET成員資格提供程序的擴展成員資格提供程序。你應該能夠在適當的時候跳入。

編輯迴應羅伯特的評論:

作爲直接回答爲什麼實體框架沒有創造添加到用戶配置類列,這種情況發生在用戶配置表由SimpeMembership初始化應用程序之前已創建特定的表格創建運行。原因是SimpleMembership有一個UserProfile表的內置定義,SimpleMembership隨時創建該表。 UserProfile表創建的時間非常重要,因此需要確保在SimpleMembership初始化運行之前創建特定於應用程序的表。

+1

我認爲這令人滿意地回答了這些問題。有一些鬆散的結束(爲什麼Entity Framework不創建我的列),但總的來說,對響應非常滿意(主要是由於包含相關的源代碼)。 – Robert

相關問題