Asp.Net大型项目实践(10)-基于MVC Action粒度的权限管理(在线demo,全部源码)
权限管理是个老生常谈的功能,我看博客园也有不少“高手”写了相关的文章,但大多不是空谈理论,就是做的十分傻瓜和玩具差不多没有真正项目实用性。少数基于RBAC的看设计还可以,但犹抱琵琶半遮面的,谈到关键实现就阳痿,生怕别人学到似的。
权限管理是每个项目都要用到的,但一般想写好也有一定难度。所以不少人动不动就想做所谓“通用权限管理”,但基本我看都是雷声大雨点小。弦哥也写过所谓通用权限 ,什么基于RBAC,什么资源+操作=权限。搞来搞去灵活是灵活了,结果配置十分复杂在项目中使用并不理想,再加上“通用”二字,那就必须要独立于平台技术和项目,实现解耦,而权限是经常都需要访问的,所以数据传输,效率也成了大问题。
而且通用权限的需求是非常多的,一般很难想全,我看园子里吉日哥虽然技术不咋地,但征集权限需求这个路子还是对的,至少比有些人随便写个玩具就敢号称“通用权限”来的好些。
BB了这么多,来说说我的权限管理吧,正如上面所说我基本放弃搞所谓通用权限了,在吉日哥非常牛X非常通用的权限管理露出真面目之前,我觉得针对不同项目特点写不同的权限管理功能还是目前比较可行办法。所以我的这个权限通用肯定不敢说,只能说是局限在MVC框架下的,满足我这个项目需求的权限管理。
由于吉日哥的权限老是遮遮掩掩,我看他放出的那点代码也非常蹩脚,他的通用权限不知道啥时候才能完全憋出来...所以弦哥带上全部Demo和源码给大家一个安慰吧。
由于篇幅有限 数据库访问这块我不解释(之前的系列已经很详细的讲过了),EXTJS代码我不解释(之后会详细写EXTJS的典型应用场景),凡涉及到与权限无关的代码我不解释(大家有兴趣可以提出来,以后我详细介绍)。
上传完demo都凌晨6点了,太累。。。下篇再放详细的实现思路和代码吧,全部可运行的源码也在下篇放出来....有大家有啥意见可以提出来,在下篇解释。
虽然有了demo但发图的国际惯例不能丢:
在线Demo:
服务器:网通
端口:不要禁用1234端口应该就可以访问
注意:连了数据库的,时间仓促肯定有漏洞,不要捣乱哈:)
登录用户: 1.用户名:牛头人战士 密码:000000 权限:有全部菜单页面,不能进行数据库的更改操作(不影响录入体验)
2.用户名:老虎MM 密码:000000 权限:少两个菜单页面,不能进行数据库的更改操作(不影响录入体验)
3.用户名:admin 密码不公开 权限:所有权限
注:以上的实现都是通过权限管理s配置出的哈,没有任何硬编码
适用项目:
基于Asp.Net MVC开发并严格按照MVC思想进行编码的MIS项目
功能模块:
用户管理
科室管理
角色管理
菜单管理
Atcion粒度的功能权限管理
登录,注销等
关键概述:
用户和科室是多对多的..
用户和角色是多对多的..
角色和菜单是多对多的..
角色和Atcion是多对多的..
角色是可以继承的..
登录是用自带的Form验证的..
所有权限判定相关的数据都是缓存的..
菜单是动态配置的..
Action权限维护是通过反射出来的,方便选取(权限判断等没有用反射)...
最小权限判定的边界是在Action请求...
判断逻辑是菜单权限必须判断,Action细粒度的功能权限只有被维护才判断...
由于是Asp.net MVC +Ext 所以基本页面上的每个操作(Action请求)都可以控制到的。肯定是可以满足MIS类项目的权限控制粒度需求了...
是通过自定义的MVC的Filter实现的(没有用自带的那个AuthorizeAttribute)...
局限性:
只能基于ASP.NET MVC下使用...
没有数据权限管理(自己可以加...我看用AOP方式实现就不错)...
如多级授权,单点登录等扩展功能没有实现(自己可以扩展)...
表设计: