刚才在研究系统的权限算法,看了很多文章和帖子,每当看到一个新算法,就拍案称绝,却全然没有了往日的理性判断,直到看到该算法后面的评论才能发现其中的缺陷。猛然发觉,这不就是岁数大了,头脑不够使的典型症状么?!
人不思不明,看来头脑这东西还是要经常使,总被破烂事塞满脑子,最终也就变成了破烂。
收藏小型权限算法一则:此算法只适用于小型系统的权限设置,而且使用整型数字作为权限阈值,所以数据字典务必要做好,否则后患无穷~
假设有权限定义——
删除A---0
修改A---1
添加A---2
删除B---3
修改B---4
添加B---5
理论上可以有N个操作,这取决于你用于储存用户权限值的数据类型了。这样,如果用户有权限:添加A---2;删除B---3;修改B---4。那用户的权限值 purview =2^2+2^3+2^4=28,也就是2的权的和了。化成二进制可以表示为11100。这样,如果要验证用户是否有删除B的权限,就可以通过位与运算来实现。在Java里,位与运算运算符号为&,即是:
int value = purview &((int)Math.pow(2,3));
即,当用户有操作权限时,运算出来的结果都会等于这个操作需要的权限值。
因此,可设计如下方法作为权限判断(单权限系统),多权限系统在此基础上扩展即可:
此方法虽然简洁而精妙,却由于整数位数限制,而只能表示有限种权限,因此只适用于小型简单系统的权限控制。
原算法及其探讨见http://www.javaeye.com/topic/714076
本文介绍了一种小型系统的权限控制算法,利用二进制位运算实现高效权限验证。通过将权限映射到整数位上,使用位与运算快速判断用户是否拥有特定权限。
5万+

被折叠的 条评论
为什么被折叠?



