发觉自己老了,附精妙权限算法一则

来源:互联网 发布:大淘客cms偷单吗 编辑:程序博客网 时间:2024/04/29 04:27

    刚才在研究系统的权限算法,看了很多文章和帖子,每当看到一个新算法,就拍案称绝,却全然没有了往日的理性判断,直到看到该算法后面的评论才能发现其中的缺陷。猛然发觉,这不就是岁数大了,头脑不够使的典型症状么?!

    人不思不明,看来头脑这东西还是要经常使,总被破烂事塞满脑子,最终也就变成了破烂。

    收藏小型权限算法一则:此算法只适用于小型系统的权限设置,而且使用整型数字作为权限阈值,所以数据字典务必要做好,否则后患无穷~

    假设有权限定义——

删除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

 

 

原创粉丝点击