Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)
2010-01-25 08:44
831 查看
接上篇Asp.Net大型项目实践(10)-基于MVC Action粒度的权限管理(在线demo,全部源码)
在线Demo:
地址:http://218.60.8.35:1234/
服务器:网通
端口:不要禁用1234端口应该就可以访问
注意:连了数据库的,时间仓促肯定有漏洞,不要捣乱哈:)
登录用户: 1.用户名:牛头人战士 密码:000000 权限:有全部菜单页面,不能进行数据库的更改操作(不影响录入体验)
2.用户名:老虎MM 密码:000000 权限:少两个菜单页面,不能进行数据库的更改操作(不影响录入体验)
3.用户名:admin 密码不公开 权限:所有权限
注:以上的实现都是通过权限管理s配置出的哈,没有任何硬编码
权限判断的边界
由于项目是基于MVC的,除去数据权限不说,功能权限的判断边界做在MVC 的Action上无疑是最好的选择,因为无论是一个页面,还是一个按钮,还是一次查询,都是通过Action请求实现的。这样我们只需要在每个Action请求执行之前进行权限判断就可以了,也不用折腾RBAC里的资源+操作=权限 这么麻烦。
菜单权限和功能权限
其实在MIS项目中,大多数的权限判断粒度还是页面级的,再加上我们还需要根据权限动态生成用户的菜单,所以我们把权限分成“菜单权限”和“功能权限”
菜单权限:在用户登录验证后,每个页面的请求都必须通过权限验证。
功能权限:默认客户进入页面后,页面的相关操作默认都不判断,只对显示维护出的功能权限进行权限判断。
这样有几个好处:一般情况下权限的配置简单了,因为只需要配置粗粒度的页面权限即可使用;增加了效率,不必每个Action执行之前都判断权限(虽然都做了缓存,但能少判断一次还是好的);完全不影响细粒度的权限判断,随时都可以增加对任何一个Action的权限判定
如何取Action功能权限
我们通过反射把所有的Action权限全部取出来,这样在维护选取的时候就比较方便了,也不会产生录入错误,如下图:
代码
大伙期待的源码:
虽然是从公司实际项目中扒出来的,但整个设计,思想,架构和关键代码基本都是我一个人搞的,而且业务相关的东西我都去掉了所以大家可以随便用。
里面可能涉及到不少东西还没有讲到,在以后的系列中会详细说明。
另外有人说源码编译报错缺少“HibernatingRhinos.NHibernate.Profiler.Appender.DLL”,你可以把这个DLL删除,再根据错误信息删除一行代码即可,这个其实是之前讲过的NHProfiler,NH生成SQL查看工具用的DLL。
源码:HISDemo-10.rar
数据库(估计用SQLSERVER的比较多,所以我把数据库从oracle改成了SqlServer2005,直接附加就可以了):HISDemoDb.rar
总结
权限管理这部分暂时就介绍到这里 ,以后有机会再给大家介绍数据权限,权限与工作流引擎集成,单点登录,多级授权等复杂的权限管理实现。大家可以看到上面介绍权限管理还是有些特点的:
1.充分利用MVC特点;
2.思路清晰;
3.验证逻辑简单;
4.维护方便;
5.没有效率问题;
6.和其他代码完全解耦毫无依赖;
7.非常灵活能满足绝大多数需求;
8.扩展方便;
我想通过这个权限管理的例子和相关讨论,大家应该明白一个道理,只有真正适合自己当前项目的业务和技术特点的技术方案才是好方案。
在技术水平有限的情况下盲目追求什么通用,什么全适应,往往实现费时费力还不讨好。
在软件开发这个领域,真正的高手不在于写高深的代码;玩弄艰涩的术语;也不会不考虑实际价值,为了用技术而用技术;也不会胡吹海吹,堕落到为了赚钱就放弃技术。
理论和实践结合才是王道
还是那两句老话,软件开发没有银弹,一切为了需求
写这个系列的初衷主要还是想感谢.Net技术社区里的各位朋友,长期以来大家贡献的资料文章给我的工作和学习都有很大帮助。
也是受同事 1-2-3影响,本人潜水多年突然良心发现,觉得自己也应该对.Net技术社区做一点力所能及的事,所以写下此系列。
写这玩意儿一不求出名二不求搞头衔三不求赚钱,再加上本人个性,所以写的比较随意粗糙,有时还有恶搞。哈哈,没有啥严格的排版,也没有严谨的书面用语,有时候还有点针对性,如有不适还望大家海涵
大伙捧场我就写着Happy~~
最后祝愿大家春节快乐吧,本系列春节之后再更新.....
在线Demo:
地址:http://218.60.8.35:1234/
服务器:网通
端口:不要禁用1234端口应该就可以访问
注意:连了数据库的,时间仓促肯定有漏洞,不要捣乱哈:)
登录用户: 1.用户名:牛头人战士 密码:000000 权限:有全部菜单页面,不能进行数据库的更改操作(不影响录入体验)
2.用户名:老虎MM 密码:000000 权限:少两个菜单页面,不能进行数据库的更改操作(不影响录入体验)
3.用户名:admin 密码不公开 权限:所有权限
注:以上的实现都是通过权限管理s配置出的哈,没有任何硬编码
权限判断的边界
由于项目是基于MVC的,除去数据权限不说,功能权限的判断边界做在MVC 的Action上无疑是最好的选择,因为无论是一个页面,还是一个按钮,还是一次查询,都是通过Action请求实现的。这样我们只需要在每个Action请求执行之前进行权限判断就可以了,也不用折腾RBAC里的资源+操作=权限 这么麻烦。
菜单权限和功能权限
其实在MIS项目中,大多数的权限判断粒度还是页面级的,再加上我们还需要根据权限动态生成用户的菜单,所以我们把权限分成“菜单权限”和“功能权限”
菜单权限:在用户登录验证后,每个页面的请求都必须通过权限验证。
功能权限:默认客户进入页面后,页面的相关操作默认都不判断,只对显示维护出的功能权限进行权限判断。
这样有几个好处:一般情况下权限的配置简单了,因为只需要配置粗粒度的页面权限即可使用;增加了效率,不必每个Action执行之前都判断权限(虽然都做了缓存,但能少判断一次还是好的);完全不影响细粒度的权限判断,随时都可以增加对任何一个Action的权限判定
如何取Action功能权限
我们通过反射把所有的Action权限全部取出来,这样在维护选取的时候就比较方便了,也不会产生录入错误,如下图:
代码
//注销登陆 public ActionResult Logout() { FormsAuthentication.SignOut(); Cache.RemoveSessionCache("currentuser");//清空当前用户信息缓存 return this.JsonFormat(new ExtResult { success = true }); }
大伙期待的源码:
虽然是从公司实际项目中扒出来的,但整个设计,思想,架构和关键代码基本都是我一个人搞的,而且业务相关的东西我都去掉了所以大家可以随便用。
里面可能涉及到不少东西还没有讲到,在以后的系列中会详细说明。
另外有人说源码编译报错缺少“HibernatingRhinos.NHibernate.Profiler.Appender.DLL”,你可以把这个DLL删除,再根据错误信息删除一行代码即可,这个其实是之前讲过的NHProfiler,NH生成SQL查看工具用的DLL。
源码:HISDemo-10.rar
数据库(估计用SQLSERVER的比较多,所以我把数据库从oracle改成了SqlServer2005,直接附加就可以了):HISDemoDb.rar
总结
权限管理这部分暂时就介绍到这里 ,以后有机会再给大家介绍数据权限,权限与工作流引擎集成,单点登录,多级授权等复杂的权限管理实现。大家可以看到上面介绍权限管理还是有些特点的:
1.充分利用MVC特点;
2.思路清晰;
3.验证逻辑简单;
4.维护方便;
5.没有效率问题;
6.和其他代码完全解耦毫无依赖;
7.非常灵活能满足绝大多数需求;
8.扩展方便;
我想通过这个权限管理的例子和相关讨论,大家应该明白一个道理,只有真正适合自己当前项目的业务和技术特点的技术方案才是好方案。
在技术水平有限的情况下盲目追求什么通用,什么全适应,往往实现费时费力还不讨好。
在软件开发这个领域,真正的高手不在于写高深的代码;玩弄艰涩的术语;也不会不考虑实际价值,为了用技术而用技术;也不会胡吹海吹,堕落到为了赚钱就放弃技术。
理论和实践结合才是王道
还是那两句老话,软件开发没有银弹,一切为了需求
写这个系列的初衷主要还是想感谢.Net技术社区里的各位朋友,长期以来大家贡献的资料文章给我的工作和学习都有很大帮助。
也是受同事 1-2-3影响,本人潜水多年突然良心发现,觉得自己也应该对.Net技术社区做一点力所能及的事,所以写下此系列。
写这玩意儿一不求出名二不求搞头衔三不求赚钱,再加上本人个性,所以写的比较随意粗糙,有时还有恶搞。哈哈,没有啥严格的排版,也没有严谨的书面用语,有时候还有点针对性,如有不适还望大家海涵
大伙捧场我就写着Happy~~
最后祝愿大家春节快乐吧,本系列春节之后再更新.....
相关文章推荐
- [转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)
- Asp.Net大型项目实践(10)-基于MVC Action粒度的权限管理(在线demo,全部源码)
- Asp.Net大型项目实践(9)-ExtJs实现系统框架页(非iframe,附源码,在线demo)
- Asp.Net大型项目实践(8)-从最简单开始一个ExtJs做的登录页(附源码,在线demo)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之NHibernate的Session管理与初始化(附源码)
- 【商业版、提供全部源码】基于RBAC的C#ASP.NET支持多用户的通用权限管理系统高质量源码10月份销售20套【提供操作手册设计文档下载】
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之NHibernate的Session管理与初始化(附源码)
- 【商业版、提供全部源码】基于RBAC的C#ASP.NET支持多用户的通用权限管理系统高质量源码10月份销售20套
- Asp.Net大型项目实践(5)-用Unity实现层与层之间的接口调用(附源码)
- Asp.Net大型项目实践(5)-独家资料!整合NHibernate与Json序列化(附源码)
- Asp.Net大型项目实践(2)-新建项目及分层(附源码)
- Asp.Net大型项目实践(6)-用Unity实现层与层之间的接口调用(附源码)
- 通用权限管理系统[基于asp.net(c# 4.0) + MVC 4 + extjs 4.2 + PetaPoco](一、搭架子 - 有源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之分页与排序(附源码)
- Asp.Net大型项目实践系列第二季(二)Windows桌面的ExtJs4实现(含源码) [转]
- Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之分页与排序(附源码)
- Asp.Net大型项目实践(7)-用Unity实现AOP之事务处理+为啥要用AOP(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之实现基本的数据库访问(附源码)
- Asp.Net大型项目实践(4)-用NHibernate保存和查询我们的业务领域对象之多条件组合查询(附源码)