总结前三篇关于使用MVC4 Simplemembership进行权限管理的文章,天屹写了一个后台权限管理系统和大家分享一下。
本系统通过对MVC4 Simplemembership默认数据库进行扩展实现了后台管理用户,角色和权限。通过角色的权限配置实现对前台Controller和Action的权限管理。文章会提供系统的源代码下载,下面对系统的配置和使用做一些说明,请耐心阅读下面的说明。
第一步:修改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”]也是可以的。
问题解决:
- 添加角色报错的问题,按照下面的操作顺序就不会报错了:添加权限=》添加角色=》添加用户。
为什么下载那么慢
可能是我用的国外的服务器吧,等一会我现在更新一下下载链接我的酷盘。
ok了,你刷新一下页面再点下载吧,用酷盘应该快一些了。
下载是快了,App_Data文件夹为空的
对啊就是空的,用不到那个文件夹~
连接不了数据库,提示错误 用户 ‘tystudio’ 登录失败。
把web.config 的Data Source改成本地的也不行,
应该怎么弄 谢谢
可以加QQ吗,很多问题想请教
看一下文章呀,文章里面都说了,
第一步:修改Web.config文件。
这个文件中只需要TYStudioUsersConnectionString中的用户名和密码,修改为你本地具有创建数据库的权限的用户名和密码。修改完成运行程序会系统会自动创建扩展后的Membership数据库。
我的qq:416362007
好了,谢谢
好吧,MVC4是挺不错,不过貌似权限修改了不会实时生效?没研究为什么。。还有,自动创建表的时候,如果库已经存在貌似创建表会漏掉两个。。自动创建似乎必须库不存在。。
这个问题是因为为了效率,第一次验证权限的时候把所有的权限都存在了缓存里,所以客户端这边不能实时生效。关掉网页重新打开就可以了。不过这确实是一个问题。 关于创建数据库这个问题,没有考虑数据库存在更新数据库的操作,以数据库成型这个基础考虑的,所以不需要来回修改数据库。codefirst我也不是特别熟悉~
回得那么快。。。。
创建表倒不是什么大问题,就几个表,可以导出一个现成脚本就行。至于权限嘛,个人觉得还是实时生效的比较好。
确实,这个得考虑一下怎么解决。半夜睡不着写博客呢,呵呵~
过期啦博主~
已更新,可以下载了
博主。。我设置好数据库连接后。。然后我去点击添加角色。。怎么出错了。。出错信息:foreach (var permission in db.Permissions)
这个问题暂时你先这么解决,操作顺序:添加用户权限->添加角色->添加用户系统就不会报错了,我有时间在更新一版,把发现问题都update一下。
博主。我点击添加用户权限。。然后输入权限名称。。点击添加时。。提示错误说:dbo.webpages_Permission无效。然后我到数据库里面看。。没有看到这个表:webpages_Permission。难道没有创建好这个表。。
别人使用的时候都能够生成数据库的,你试着把数据库删除再重新运行一下程序,你也可以加我qq说,联系页面里面有我qq,
未经处理的异常,行 117,列 179,在 http://localhost:5885/User 中
0x800a1391 – Microsoft JScript 运行时错误: “MM_swapImage”未定义
你加我qq,怎么还出现js错误了。。。
我也想建立一个个人博客,可我没学过php,我想请问博主如何建立类似于您这样的博客网站呢?谢谢
最好能用MVC
我这个博客使用的是Wordpress,后台的程序都不是自己写的,很方便的。有很多免费的主题,和一个非常完善的社区,网上各种教程都很多。详细了解可以加我qq~
你qq是多少啊
网站最下面的联系天屹,不便在这里贴
当让也有很多支持.net的虚拟主机,自己做后台的话,麻烦一些~
我直接复制controller和view到我的项目里面,访问报错:无法找到资源。
[HttpException]: 未找到路径“/Account/Login/”的控制器或该控制器未实现 IController。
是路由的原因么?
新手,不太会搞
补充:在vs里面,controller和view中对应的页面可以使用右键菜单“转到”对应的view或controller 中。
字面的意思没找到AccountController里面的Login action你怎么复制的,全部controller都复制过去了么?能描述的具体一些么?
把controller、Modules和views文件夹复制到我的项目里面,和我已有的合并。运行后我已有的项目能够正常访问,但是http://localhost:5784/Account/Login显示无法找到资源,源码里面注释掉的代码显示:
我弄错了地址错了,应该是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(“”, “用户名或密码错误”);这里,网页上显示“用户名或密码错误”。
这里貌似说了原因:
http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx
http://insomniacgeek.com/to-call-this-method-the-membership-provider-property-must-be-an-instance-of-extendedmembershipprovider/
我用这里的方法解决的:Edit your web.config and replace:……
你的项目不是mvc4的吧,mvc4项目中默认集成了这些配置,所以不需要再web.config中加simplemembership的配置信息,解决了就好了~
我的是mvc5+ef5 codefirst 有那些配置,但不一样,是修改不是添加这些配置。
我其实到现在也没完全改好,楼主有时间可以写篇教程,怎样科学的把这个权限模块合并到已有的项目中。很期待。。。
太感谢天屹的帮助了
博主也没什么创新啊,都是用的项目源码,看了下,而且用的aspx视图,都没用Razor视图引擎;另外后台布局还搞得table布局,代码借鉴意义不大
管理权限怎么弄啊 ,为什么都说没有权限
你能说的具体一点么?具体哪里有问题?
我按照添加权限-》添加角色-》添加用户步骤,但是还是说没有权限,是规定什么admin之类的吗,能说说嘛
读读文章里的第二步和第三步
正在研究角色控制 看您写的十分炫 学习一下 您辛苦了
希望能对你有所帮助
这个权限管理不能实时生效啊,页面修改权限后还必须重新生成项目,意义不大。
是可以时时生效的,现在代码中获取权限应该是放到了缓存中,只需要把这段代码优化一下,不要再从缓存中拿就可以了,
改微软的看的总感觉不明不白的,还是自己写了一个看着简单清爽
我这里一直报若要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。求帮忙解答
不好意思,最近太忙了,你可以加一下我的qq:416362007,或者加入群:281660626, 我们看看你这个问题怎么解决。
我用你的代码,还是我自己的代码都只能生成默认的表结构.也就是自己写的model没起作用.你又这情况吗?
写得很好哇,在项目中应用应该都没问题。不过我喜欢CodeFirst,因为易于扩展和维护。还有小小的美中不足就是博主的前端有点偷工减料吧,哈哈。。。
当时写这个,因为时间急,前台除了js基本上都不是我写的,直接从网上弄了个模板,所以都是table一大堆特别乱,我当时修改的时候给我愁死了… 这篇文章重点是提供了一种扩展和应用Simplemembership的方法~
很遗憾,vs2010打不开。。。
下载链接在哪里啊?
下载后搞了几个小时,始终生成的是默认的表结构,原来还需要进行一次迁移才能正确生成表结构
不明白的同学参考::
http://blog.spontaneouspublicity.com/including-asp-net-simple-membership-tables-as-part-of-your-entity-framework-model
和
http://www.cnblogs.com/ruijiang21/p/3316047.html
不能编辑新补充一下,关键命令
Enable-Migrations -ContextTypeName TYStudio.TYStudioMembershipContext
会生成配置文件,后面参考链接里面说的进行。
建数据库有要求么,还是就建管理员Admin表和用户User表啊
杂么下载了?没反应啊