最经典的权限设计同样也是最糟糕的权限设计,权限设计理念最关键第一步之间的PK
2010-12-21 16:00 通用C#系统架构 阅读(7387) 评论(42) 编辑 收藏 举报大概在接近10年前做VB版本的ERP系统,其中的权限分配也完全是类似下面的设计思路,分若干个模块、有新增、删除、编辑、删除、扩展1、扩展2、扩展3等操作权限定义,当时也很佩服设计类似权限系统的人,感觉设计这个的人真的是很有水平,甚至在后来的N多业务系统里也进行模仿,也做过类似的权限判断优化的存储过程程序等,当年也非常有成就感,呵呵。
当还没深入开发时也感觉不出来其中的奥秘,也体会不出来否好用还是不好用,就感觉看着是很强大,足够强大,还可以无限扩展一样。
随着自己着手开发的信息化业务系统越来越多、经验积累也越来越多、各种体会也越来越深刻,从最近5年左右开始,逐渐发现这个权限设计存在蛮多问题,有很多细节方面无法满足开发要求灵活性,先简单的总结一下其中的不足,虽然对付用用还是没问题:
1:例如有些模块,是没删除功能的也没结束功能的,例如打个比方“成本预算”不是啥模块都清一色“添加、删除、修改”,权限哪里有那么简单了。
2:无法进行灵活扩展,例如某一个人有人事招聘权限、面试权限、笔试权限、确定岗位权限、确定试用期期限的权限,那怎么扩展了?那不是没完没了了?
3:判断权限的函数相对繁琐,需要判断哪个模块上的什么操作权限?2个参数才可以,相对于只进行有什么操作权限判断还是过于复杂。
4:无法简化、细化操作权限项,例如我想简化为5个权限,不想设置这么多权限时,就会麻烦一些。
由于存在以上几点缺点无法得到比较好的解决,后来权限管理的设计就进行了简化、使得更加灵活了,更加好扩展了。
操作权限的判断函数也变得非常简单,就一行代码就可以了,思路也简化了,灵活性也有了。
// 这些是操作权限,当前用户有什么相应的操作权限?
this.permissionAdd = this.IsAuthorized("RoleAdmin.Add");
一个好的权限管理系统,若刚开始就走错了方向,那接下来越走就越折腾了,很多时候往往是设计思想的一点点变化,可能会导致全局上的天大差别,有的软件越走越臃肿,越累。
其实很多时候,往往是差距那么一点点的小小的设计理念,小小的功能差别,就能绝对胜败。例如海湾战争期间,伊拉克的坦克也是坦克,老美的坦克也是坦克,他们很多功能都有,但是人家老美的坦克就能多打几百米,那就整个战场上可能就由于有几百米的差距,带来惨痛的损失,在软件开发上也是一样的,很多功能上的一些细小的差距很可能导致了,整个软件系统就是没人家的好用。