2012-12-29 134 views
3

我在mvc4應用程序中使用簡單的成員資格提供程序,我可以看到爲此生成的五個表。在這我可以看到用戶名和密碼存儲在不同的表格。我想用一些自定義字段將用戶名和密碼保存在同一張桌子上。所以我通過繼承ExtendingMembership Provider來創建自己的Membership Provider。我對此有一些疑問。自定義SimpleMembership提供程序

  1. 我的應用程序使用3層架構(BLL,DAL和表示層),併爲帳戶和管理員創建了2個區域。所以在這裏我不知道在哪裏放置我的會員供應商,然後使用Authorize Attribute的應用程序的每個部分進行訪問。
  2. 我重寫了這個方法CreateUserAndAccount,我需要實現我自己的邏輯來保存用戶註冊數據到數據庫。但我發現只傳遞了一些參數,如何將剩餘的自定義字段從視圖傳遞給使用字典對象的控制器?

    public override string CreateUserAndAccount(string userName, string password, bool  requireConfirmation, IDictionary<string, object> values) 
    { 
        throw new NotImplementedException(); 
    } 
    

回答

0

對於#1:根據需要使用DI將ExtendedMembershipProvider注入BLL圖層。在您的DI配置中將其映射到Membership.Provider。這實際上是一個DAL,不應包含業務邏輯。最好還是圍繞WebSecurity創建一個門面,然後將其注入到BLL中。

對於#2:是的ExtendedMembershipProvider接口使用鍵/值對的字典,可以使用您選擇的實施將用戶配置文件屬性映射到數據庫模式。

SimpleMembershipProvider通過將字典鍵映射到相應的數據庫列來實現此目的。記錄創建完成後,您可以直接使用EF和UserProfile模型管理用戶數據。

實施自己的ExtendedMembershipProvider是一個很多工作,我不會推薦它。與傳統迭代相比,SimpleMembershipProvider模式相對比較乾淨,我認爲您需要一個非常好的理由將密碼列移動到用戶表,而不僅僅是配置SimpleMembershipProvider以使用您自己的模式,並將密碼保留在正確的位置。