走火入魔.NET权限组件-用资源权限(设置权限)思想来解来解决权限的存储问题
2010-07-11 16:29 通用C#系统架构 阅读(2159) 评论(8) 编辑 收藏 举报一个软件并不是B/S的就牛了,或者是C/S的就怎么了,软件的主要目的是为了达到用户的什么目的?QQ为啥不做个B/S的?VS系列为啥不做个B/S的?SAP为啥不做个B/S的?操作系统为啥不作个B/S的?只要能满足客户的需求不管事B/S的C/S的都是可以的,客户是否用起来方便,维护是否方便,定位是否准确比B/S的还是C/S的更重要,一个思想并不在于它是B/S的还是C/S的,而在于是把问题如何巧妙的解决的。
其实权限的存储,看透了,也是很简单的事情,就是 “什么对象对什么资源有什么权限?”把这个逻辑关系能保存好就ok了,你这样设计了,别人也容易阅读你的程序,容易理解你的数据库设计,将来也容易维护一些。
用一个思想,前后不矛盾的,把整个系统实现出来,也有些不容易,很多环节会出现前后矛盾,思路混乱的情况,所以时刻要提醒自己,自己的权限系统是按“什么对象对什么资源有什么权限?”的指导思想设计的,若有违背了这个思想,那就仔细深入思考,再重新整理思路。
什么对象:在系统里确定各种对象的唯一性,需要2个参数,一个是对象的类别,一个是对象的主键,就像是ERP里的入库单(单号)。
什么资源:什么资源,也是一样的,也需要一个分类,一个主键来识别资源的唯一性。
什么权限:最简单的做法,就是有一个权限表,只用主键来识别唯一性,而不是用“哪个模块+哪个功能”来识别权限,那样做过于繁琐了,将来的扩展性、可维护性都会很差一些,不能灵活适应各种复杂的情况。
参考权限的存储结构如下:
下面是相对万能的权限设置界面参考:
用户资源权限设置如下界面
角色资源权限设置如下界面
当然以上参考界面是,从资源的角度出发,对某个资源,哪些用户哪些角色有什么权限?的角度进行设置的权限页面。
存储在数据库中的效果如下:
以上界面的思想,也是体现了:“什么对象对什么资源有什么权限?”的核心指导思想。
每个软件公司,软件产品,都需要有执著追求的人,追求每一个细节功能的实现,追求每一个用户的反馈意见完美解决,追求不断完善,追求铜墙铁壁的精神,才能作好软件,再简单的软件,真正做透做深都非常不容易,就这么个简单的权限管理系统,我也搞来搞去完善了很多年,更何况一个复杂的应用系统,需要N多人N多年的精心锤炼才能打造出大家喜欢用的精品软件系统来。
说得通俗一点儿,我就是输入个内容然后有个查找列表功能就可以了,就这么简单的功能,能诞生出“google,baidu”这样大公司,让我们做个这么简单的功能,有几个人能真正做出来?换成其他的软件系统,也是一样的道理,做个真正功能强大的,好用的软件,都不容易的,没有表面上看上去一样那么简单,特别是模拟过别人系统的人会有这样的感受,不就那么几个功能吗?几天就可以搞定,但是往往模拟了、自己做了后发现,别说几天,几周都做不完。
很多事情,并没有你看上去的那么简单,你想象的那么简单,只有自己去做了后才发现,里面的水很深。