SimpleMembership
最近2個月以來,一直在學習MVC,從最開始的2,一直到最新的4.從原來的aspx到現在的Razor引擎,越學越開心,越學越上癮。
最近為新項目做準備,打算用MVC4,VS2012+SQL2012,反正啥新用啥。
新技術雖然方便,但也會遇到以往沒有的問題,這不SimpleMembership在這里就出現了。
以下為學習SimpleMembership中遇到的一些問題及解決辦法。
?
以前在webform中一直用Membership,MVC2,3中也一樣使用,沒啥差別,可這次不同了,Mvc4中突現SimpleMembership,初遇,百度一翻,覺得挺爽,功能基本和原來差不多,可以自動幫我建表。
但問題也來了,我不單要管理用戶,還要管理角色。可角色管理網上卻沒查到相關資料。
直到今天和濕哥一起研究,又百度,又查查查,終于被我查到一篇英文文檔,如下:
First, the new project template creates an MVC 4 Internet application without any provider configuration, but for the membership features to work properly during a migration, it appears you need at least some configuration. The following code makes sure the SimpleMembershipProvider and SimpleRolesProvider are in place.
<roleManager enabled="true" defaultProvider="simple"><providers>
<clear/>
<add name="simple" type="WebMatrix.WebData.SimpleRoleProvider,
WebMatrix.WebData"/>
</providers>
</roleManager>
<membership defaultProvider="simple">
<providers>
<clear/>
<add name="simple" type="WebMatrix.WebData.SimpleMembershipProvider,
WebMatrix.WebData"/>
</providers>
</membership>
Then inside the Seed method of the DbMigrationsConfiguration<T> derived class, you can have:
protected override void Seed(MovieDb context)
{???????????
??? //context.Movies.AddOrUpdate(...);
??? // ...
??? SeedMembership();
}
private void SeedMembership()
{???????????
??? WebSecurity.InitializeDatabaseConnection("DefaultConnection",
??????? "UserProfile", "UserId", "UserName", autoCreateTables: true);
??? var roles = (SimpleRoleProvider) Roles.Provider;
??? var membership = (SimpleMembershipProvider) Membership.Provider;
??? if (!roles.RoleExists("Admin"))
??? {
??????? roles.CreateRole("Admin");
??? }
??? if (membership.GetUser("sallen",false) == null)
??? {
??????? membership.CreateUserAndAccount("sallen", "imalittleteapot");
??? }
??? if (!roles.GetRolesForUser("sallen").Contains("Admin"))
??? {
??????? roles.AddUsersToRoles(new[] {"sallen"}, new[] {"admin"});
??? }
}?
?
?
配置照做,看到SeedMembership與項目中的InitializeSimpleMembershipAttribute中的SimpleMembershipInitializer比較相像,就結合了一下
private class SimpleMembershipInitializer{public SimpleMembershipInitializer(){Database.SetInitializer<UsersContext>(null);try{using (var context = new UsersContext()){if (!context.Database.Exists()){// Create the SimpleMembership database without Entity Framework migration schema ((IObjectContextAdapter)context).ObjectContext.CreateDatabase();}}WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);//-----------------var roles = (SimpleRoleProvider) Roles.Provider;if (!roles.RoleExists("Admin")){roles.CreateRole("Admin");}//----------------- }catch (Exception ex){throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex);}}}結果成功創建Admin Role。
濕哥說,可以不用配置,直接使用,試驗之,成功。
結果表明,使用SimpleMembership確實非常方法,好多都集成了,不用再像以前那樣運行向導再生成了。
但可惜的是,SimpleMembership的擴展只支持UserId為int類型,有點不爽,我想使用GUID,有點局限了。
?
上張圖,來幫助理解實現過程(2013-11-28):
?
SimpleMembership續
?
一些學習資料:
Asp.net Mvc4默認權限詳細(上)
Asp.net Mvc4默認權限詳細(下)
http://www.codeproject.com/Articles/637428/SimpleMembershipProvider-vs-MembershipProvider
http://www.mono-software.com/blog/post/Mono/226/Adding-ASP-NET-SimpleMembership-to-an-existing-MVC-4-application/
http://www.codeguru.com/csharp/.net/net_asp/mvc/using-simplemembership-in-asp.net-mvc-4.htm
轉載于:https://www.cnblogs.com/avictor/p/3267816.html
總結
以上是生活随笔為你收集整理的SimpleMembership的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快手发布二季度财报 还在继续亏损中
- 下一篇: 拍拍贷多久可以到账