Membership相信大家都不陌生,Membership是微軟在.NET 2.0時代推出的一套使用者管理工具,問題在於微軟官方的Membership僅僅是對SqlServer製作的,如果你的系統需要使用Mysql或者是Oracle就不好辦了,雖然有些別的Membership能支援Mysql或者Oracle的,但是還沒有一個整合到一起的。
經曆了這麼多項目之後,有的項目用的是SqlServer,有的項目用的是Oracle,還有的項目用的是Mysql,而這些MIS項目基本上都用到了Membership,所以才會想到做一個同時支援多資料庫的Membership,而且這個Membership和微軟官方的一樣,都是標準的Membership,你原來的代碼不用做任何更改就可以使用。
下面先介紹一下這個項目的基本思路:
1、 自訂的Membership需要從MembershipProvider 類繼承,MembershipProvider類是一個抽象類別,一般只要實現了這些類中的方法就可以完成自己的Membership,我的這個自訂的Membership叫KSPMembership。
2、 多資料庫的支援是在自訂的Membership中進行分層,調用能支援多資料庫的DAL即可。這裡面使用了Ibatis.net來支援多資料庫。
3、 微軟內建的Membership資料庫中有不少表,分析之后里面有些表沒啥用,這裡Membership相關的一共就4張表,Application(應用程式表),Role(角色表),User(使用者表),UserInRole(使用者對應角色表)
下面看看具體如何使用,以ASP.NET MVC2,MySql 舉例:
1、 執行建表的SQL語句,將這4張表建立起來,SQL語句在附件組件包中。
2、 開啟VS2008,建立一個ASP.NET MVC2 工程(MVC1 也一樣),將組件包中所有DLL檔案都COPY到BIN目錄下。
3、 修改Web.Config檔案,
A、 在<appSettings>節點下增加:
<appSettings>
<add key="KSPDBType" value="oracle"/>
<add key="KSPAPPName" value="MoleCart"/>
</appSettings>
說明:KSPDBType 是表示你的資料庫類型,可以是 mysql/oracle/sqlserver 中的任意一個字串,不區分大小寫;KSPAPPName 是表示你的應用程式名稱。
B、 在<connectionStrings>節點下增加:
<connectionStrings>
<add name="KSPDB" connectionString="server=127.0.0.1;database=kingsiteshop;user id=root;password=;charset=utf8"/>
</connectionStrings>
說明:這個資料庫連接是為Membership準備的。注意 KSPDB 是寫死的,不能改變
C、 在<system.web>節點下修改增加:
代碼 <membership defaultProvider="KSPMembershipProvider"
userIsOnlineTimeWindow="15">
<providers>
<clear />
<add
name="KSPMembershipProvider"
type="KingSite.Purview.KSPMembershipProvider,KingSite.Purview"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
writeExceptionsToEventLog="true"
/>
</providers>
</membership>
<roleManager enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES"
defaultProvider="KSPRoleProvider">
<providers>
<clear />
<add autogenerateschema="true" writeExceptionsToEventLog="true"
name="KSPRoleProvider" type="KingSite.Purview.KSPRoleProvider,KingSite.Purview" />
</providers>
</roleManager>
4、 完成後在VS2008 中先編譯MVC網站項目,然後選中你的ASP.NET MVC 項目,然後點擊 項目菜單-》ASP.NET 配置,開啟VS內建的網站配置網頁。
5、 如果一切正常你就會看到。
6、 恭喜你,自訂Membership可以工作了,你可以通過修改設定檔中的KSPDBType節點來修改資料庫類型,很方便吧,不同的項目就可以配置為不同的資料庫了。
7、KSPMembership在c# 3.5,Mysql 5.1,Oralce 10g,SqlServer 2008 測試通過。
8、 下載KSPMembership組件包。