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

本文介绍了一种适用于小型系统的权限控制算法,使用整型数字作为权限阈值,通过位运算实现高效权限验证。并提供了一个简洁的Java方法示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

假设有权限定义——

删除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));
即,当用户有操作权限时,运算出来的结果都会等于这个操作需要的权限值。

因此,可设计如下方法作为权限判断(单权限系统),多权限系统在此基础上扩展即可:

//userPurview是用户具有的总权限 //optPurview是一个操作要求的权限为一个整数(没有经过权的!) public static boolean checkPower(int userPurview, int optPurview){ int purviewValue = (int)Math.pow(2, optPurview); return (userPurview & purviewValue) == purviewValue; }

此方法虽然简洁而精妙,却由于整数位数限制,而只能表示有限种权限,因此只适用于小型简单系统的权限控制。

原算法及其探讨见http://www.iteye.com/topic/714076

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值