最近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相关推荐

  1. 轻松学MVC4.0–4 扩展UserProfile

    原文 http://www.cnblogs.com/ybst/archive/2012/10/31/2748275.html 1.扩展字段. 现在,要给UserProfile表加两个非空字段:Firs ...

  2. 全新的membership框架Asp.net Identity(1)——.Net membership的历史

    在Asp.net上,微软的membershop框架经历了Asp.net membership到Asp.net simple membership,再到现在的Asp.net Identity. 每一次改 ...

最新文章

  1. 点击拖动放大该图片大小
  2. 鼠标滑过某一个图标时,提示讯息
  3. 计算机基础知识教案总结,计算机基础知识教学设计
  4. Shell(12)——awk(2)
  5. 云服务器 web网站吗,web云服务器免费的吗
  6. php调用image类提示不存在的字体,php – 无效的字体文件名(imagettfbox)
  7. 马斯克扎心了!猎鹰重型火箭核心助推器运输过程中坠海
  8. leetcode python3 简单题226. Invert Binary Tree
  9. 力扣-面试题 16.10. 生存人数
  10. CV中必要的数学知识_奇异值的物理意义是什么?
  11. 韩顺平Java课程:第7章作业13题
  12. 【技术】jquery暂无图片替换
  13. 江南大学c语言课程绩点评分,江南大学无锡医学院课程考核档案管理办法
  14. pyqt5 设置动态背景图片
  15. 【板栗糖GIS】DOS—如何在当前文件夹内部批量建子文件夹
  16. 【思维导图】canny滤波 原理步骤细致剖析
  17. 13、腾讯云轻量应用服务器挂载文件系统
  18. 游戏防封技术是学易语言还是学c,易语言写游戏脚本防封执行sqlplus 之后没执行...
  19. violate关键字的用法
  20. PowerDesigner 15学习笔记:十大模型及五大分类

热门文章

  1. Linux vim取消高亮显示
  2. 请你简要说明一下线程的基本状态以及状态之间的关系?
  3. openresty获取nginx请求url中的所有参数
  4. idea设置启动时打开欢迎页
  5. 【软考-软件设计师】计算机指令系统
  6. docker中部署Redis
  7. 思考一个问题:如何重现主从备份失败的案例
  8. C++设计模式--状态模式(state)
  9. Qt C++属性类型提供给 QML调用(五)
  10. C语言各种变量的初始化