MVC4 Simplemembership后台权限管理系统(附源码下载)

总结前三篇关于使用MVC4 Simplemembership进行权限管理的文章,天屹写了一个后台权限管理系统和大家分享一下。
本系统通过对MVC4 Simplemembership默认数据库进行扩展实现了后台管理用户,角色和权限。通过角色的权限配置实现对前台Controller和Action的权限管理。文章会提供系统的源代码下载,下面对系统的配置和使用做一些说明,请耐心阅读下面的说明。

TYStudio-MVC4-Simplemembership-Permission-Manage-System

Git @ OSC源码下载

第一步:修改Web.config文件。

这个文件中只需要TYStudioUsersConnectionString中的用户名和密码,修改为你本地具有创建数据库的权限的用户名和密码。修改完成运行程序会系统会自动创建扩展后的Membership数据库。

第二步:建立系统管理员角色和用户。

考虑到手动添加系统管理员角色和用户比较麻烦,初始的程序都是可以匿名访问的,这时候你需要运行系统添加一个系统管理员角色,并添加一个用户赋给系统管理员权限。再添加完系统管理员角色和用户之后你需要修改一下Controllers下面的各个Controller,注释掉[AllowAnonymous]并把//[Authorize(Roles = "系统管理员")]注释打开。编译重新运行程序,这时后台管理系统只能允许系统管理员角色的用户登陆了。

第三步:测试产品模块(ProductController)

Controller下有一个ProductController是用来测试我们的权限管理是否成功的起作用了,同时也是对前台Controller和Action进行全线控制的方法。

这里使用[TYStudioAuthorize("查询产品")]方式对Action进行访问控制。

所有关于Membership的类都在Models/Membership文件夹下面。将来你需要把这些class移植到你的公共project中去,这样就可以使用MVC4 Simplemembership对你的前台进行权限控制了。

最后当你明白ProductController控制访问权限的方法之后,ok,现在可以把这个权限管理系统用于你的前台网站的权限管理了。

如果有什么问题,不要顾虑尽管留下你的问题,我们一起解决掉他们。

一般的系统是不需要控制到每个action的,你可以在每个Controller前面用你自己重写的CustomizeAuthorize[“RoleName”]的方式就可以了。当然你也可以不重写新的,直接使用系统默认的Authorize[“RoleName”]也是可以的。

问题解决:

  1. 添加角色报错的问题,按照下面的操作顺序就不会报错了:添加权限=》添加角色=》添加用户。


57 评论

  1. 游客   •  

    为什么下载那么慢

    • 天丶屹   •     作者

      可能是我用的国外的服务器吧,等一会我现在更新一下下载链接我的酷盘。

    • 天丶屹   •     作者

      ok了,你刷新一下页面再点下载吧,用酷盘应该快一些了。

  2. 游客   •  

    下载是快了,App_Data文件夹为空的

    • TYStudio   •     作者

      对啊就是空的,用不到那个文件夹~

      • 游客   •  

        连接不了数据库,提示错误 用户 ‘tystudio’ 登录失败。
        把web.config 的Data Source改成本地的也不行,
        应该怎么弄 谢谢
        可以加QQ吗,很多问题想请教

        • TYStudio   •     作者

          看一下文章呀,文章里面都说了,
          第一步:修改Web.config文件。
          这个文件中只需要TYStudioUsersConnectionString中的用户名和密码,修改为你本地具有创建数据库的权限的用户名和密码。修改完成运行程序会系统会自动创建扩展后的Membership数据库。
          我的qq:416362007

          • 游客   •  

            好了,谢谢

  3. Tranqulity   •  

    好吧,MVC4是挺不错,不过貌似权限修改了不会实时生效?没研究为什么。。还有,自动创建表的时候,如果库已经存在貌似创建表会漏掉两个。。自动创建似乎必须库不存在。。

    • TYStudio   •     作者

      这个问题是因为为了效率,第一次验证权限的时候把所有的权限都存在了缓存里,所以客户端这边不能实时生效。关掉网页重新打开就可以了。不过这确实是一个问题。 关于创建数据库这个问题,没有考虑数据库存在更新数据库的操作,以数据库成型这个基础考虑的,所以不需要来回修改数据库。codefirst我也不是特别熟悉~ [委屈]

      • Tranqulity   •  

        回得那么快。。。。
        创建表倒不是什么大问题,就几个表,可以导出一个现成脚本就行。至于权限嘛,个人觉得还是实时生效的比较好。

        • TYStudio   •     作者

          确实,这个得考虑一下怎么解决。半夜睡不着写博客呢,呵呵~

  4. 六翼拉菲尔   •  

    过期啦博主~

    • 天屹   •     作者

      已更新,可以下载了

  5. ccb   •  

    博主。。我设置好数据库连接后。。然后我去点击添加角色。。怎么出错了。。出错信息:foreach (var permission in db.Permissions)

    • 天屹   •     作者

      这个问题暂时你先这么解决,操作顺序:添加用户权限->添加角色->添加用户系统就不会报错了,我有时间在更新一版,把发现问题都update一下。

      • ccb   •  

        博主。我点击添加用户权限。。然后输入权限名称。。点击添加时。。提示错误说:dbo.webpages_Permission无效。然后我到数据库里面看。。没有看到这个表:webpages_Permission。难道没有创建好这个表。。

        • 天屹   •     作者

          别人使用的时候都能够生成数据库的,你试着把数据库删除再重新运行一下程序,你也可以加我qq说,联系页面里面有我qq,

  6. 墨尔   •  

    未经处理的异常,行 117,列 179,在 http://localhost:5885/User

    0x800a1391 – Microsoft JScript 运行时错误: “MM_swapImage”未定义

    • 天屹   •     作者

      你加我qq,怎么还出现js错误了。。。

  7. 小跳蚤   •  

    我也想建立一个个人博客,可我没学过php,我想请问博主如何建立类似于您这样的博客网站呢?谢谢

    • 小跳蚤   •  

      最好能用MVC [害羞]

      • 天屹   •     作者

        我这个博客使用的是Wordpress,后台的程序都不是自己写的,很方便的。有很多免费的主题,和一个非常完善的社区,网上各种教程都很多。详细了解可以加我qq~

        • 小跳蚤   •  

          你qq是多少啊

          • 天屹   •     作者

            网站最下面的联系天屹,不便在这里贴

      • 天屹   •     作者

        当让也有很多支持.net的虚拟主机,自己做后台的话,麻烦一些~

  8. yzy   •  

    我直接复制controller和view到我的项目里面,访问报错:无法找到资源。
    [HttpException]: 未找到路径“/Account/Login/”的控制器或该控制器未实现 IController。
    是路由的原因么?
    新手,不太会搞

    • yzy   •  

      补充:在vs里面,controller和view中对应的页面可以使用右键菜单“转到”对应的view或controller 中。

    • 天屹   •     作者

      字面的意思没找到AccountController里面的Login action你怎么复制的,全部controller都复制过去了么?能描述的具体一些么?

      • yzy   •  

        把controller、Modules和views文件夹复制到我的项目里面,和我已有的合并。运行后我已有的项目能够正常访问,但是http://localhost:5784/Account/Login显示无法找到资源,源码里面注释掉的代码显示:

        • yzy   •  

          我弄错了地址错了,应该是http://localhost:5784/Admin/Login不是account。不过现在登录界面可以看到了,登陆时报错:若要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。
          行 30: if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password))
          是ActionResult Login里面报错,完整代码:
          [HttpPost]
          [AllowAnonymous]
          [ValidateAntiForgeryToken]
          public ActionResult Login(LoginModel model, string returnUrl)
          {
          if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password))
          {
          return RedirectToAction(“Index”);
          }

          ModelState.AddModelError(“”, “用户名或密码错误”);
          return View(model);
          }
          不过也挺奇怪,有时候页面又能执行到 ModelState.AddModelError(“”, “用户名或密码错误”);这里,网页上显示“用户名或密码错误”。

          • 天屹   •     作者

            你的项目不是mvc4的吧,mvc4项目中默认集成了这些配置,所以不需要再web.config中加simplemembership的配置信息,解决了就好了~

          • yzy   •  

            我的是mvc5+ef5 codefirst 有那些配置,但不一样,是修改不是添加这些配置。
            我其实到现在也没完全改好,楼主有时间可以写篇教程,怎样科学的把这个权限模块合并到已有的项目中。很期待。。。

  9. yt_qincaodi   •  

    太感谢天屹的帮助了

  10. 123   •  

    博主也没什么创新啊,都是用的项目源码,看了下,而且用的aspx视图,都没用Razor视图引擎;另外后台布局还搞得table布局,代码借鉴意义不大

  11. micker   •  

    管理权限怎么弄啊 ,为什么都说没有权限

    • 天屹   •     作者

      你能说的具体一点么?具体哪里有问题?

      • micker   •  

        我按照添加权限-》添加角色-》添加用户步骤,但是还是说没有权限,是规定什么admin之类的吗,能说说嘛

        • 天屹   •     作者

          读读文章里的第二步和第三步

  12. 青山在竹中箫   •  

    正在研究角色控制 看您写的十分炫 学习一下 您辛苦了

    • 天屹   •     作者

      希望能对你有所帮助

  13. 熊峰   •  

    这个权限管理不能实时生效啊,页面修改权限后还必须重新生成项目,意义不大。

    • 天屹   •     作者

      是可以时时生效的,现在代码中获取权限应该是放到了缓存中,只需要把这段代码优化一下,不要再从缓存中拿就可以了,

      • 熊峰   •  

        改微软的看的总感觉不明不白的,还是自己写了一个看着简单清爽

  14. 花田月下小霸王   •  

    我这里一直报若要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。求帮忙解答

    • 天屹   •     作者

      不好意思,最近太忙了,你可以加一下我的qq:416362007,或者加入群:281660626, 我们看看你这个问题怎么解决。

  15. 李乐   •  

    我用你的代码,还是我自己的代码都只能生成默认的表结构.也就是自己写的model没起作用.你又这情况吗?

  16. 伍仟蚊   •  

    写得很好哇,在项目中应用应该都没问题。不过我喜欢CodeFirst,因为易于扩展和维护。还有小小的美中不足就是博主的前端有点偷工减料吧,哈哈。。。

    • 天屹   •     作者

      当时写这个,因为时间急,前台除了js基本上都不是我写的,直接从网上弄了个模板,所以都是table一大堆特别乱,我当时修改的时候给我愁死了… 这篇文章重点是提供了一种扩展和应用Simplemembership的方法~

  17. 久久   •  

    很遗憾,vs2010打不开。。。

  18. 临时春   •  

    下载链接在哪里啊?

    • fei   •  

      不能编辑新补充一下,关键命令
      Enable-Migrations -ContextTypeName TYStudio.TYStudioMembershipContext
      会生成配置文件,后面参考链接里面说的进行。

  19.   •  

    建数据库有要求么,还是就建管理员Admin表和用户User表啊

  20. 高小虎   •  

    杂么下载了?没反应啊

李乐进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>