`
aaagu1234
  • 浏览: 148853 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

权限控制算法

阅读更多
这里我介绍一种很常用,也比较Professor的权限控制思路。
这里我用java语言描述,其实都差不多的。自己转一下就可以了。
为了方便,我们这里定义a^b为:a的b次方
这里,我们为每一个操作设定一个唯一的整数值,比如:

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

原理:
位与运算,顾名思义就是对位进行与运算:
以上面的式子为例:purview & 2^3 也就是 28&8
将它们化成二进制有
 11100
& 01000
-------------------
  01000 == 8(十进制) == 2^3
同理,如果要验证是否有删除A---0的权限
可以用:purview &((int)Math.pow(2,0));
即:
 11100
& 00001
------------------------
  00000 == 0(十进制)  != 2^0

这种算法的一个优点是速度快。可以同时处理N个权限
如果想验证是否同时有删除A---0和删除B---3的权限
可以用purview&(2^0+2^3)==(2^0+2^3)?true:false;
设置多角色用户。根据权限值判断用户的角色。。。

下面提供一个java的单操作权限判断的代码:
//userPurview是用户具有的总权限
//optPurview是一个操作要求的权限为一个整数(没有经过权的!)
public static boolean checkPower(int userPurview, int optPurview){
  int purviewValue = (int)Math.pow(2, optPurview);
  return (userPurview & purviewValue) == purviewValue;
}
当然,多权限的验证只要扩展一下就可以了。
几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!

补充:如果用Java的int类型的话,是32位,最多只能保存31个权限的运算,而对64位的,估计也只能保存63个权限,因此,对于更多的权限,应该进行分组,而且,过多的权限放在一起,也不易管理。
对于2的N次方来说,从硬件最底层来说,只是N次左移而已,因此并不会占用太多的资源。当然,对于一些极端情况,可能并不是一种很好的解决方案,但对于一般的中小型系统,已经足够应付!此处只是对一种算法的介绍,并不带任何的排它性!!!

               --原创,发表于:http://www.blueidea.com/tech/program/2006/3153.asp
分享到:
评论

相关推荐

    权限控制算法的实现,很经典的

    根据给定文件的信息,本文将深入探讨一种经典的权限控制算法实现方法,并对该算法进行详细的解析。权限控制在软件系统特别是涉及用户交互的应用程序中尤为重要,它确保了不同用户角色能够访问到与其职责相匹配的数据...

    一种常用的权限控制算法的实现.htm

    一种常用的权限控制算法的实现.htm

    Java权限控制的算法

    Java权限控制的算法,通过二进制数据来实现对权限的赋值,比对,提高了计算机运行效率也清晰一目了然

    经典权限管理算法

    - **移动应用**:随着移动互联网的发展,移动应用同样面临着权限管理的需求,这种算法同样适用于移动平台上的权限控制。 #### 六、总结 通过以上分析可以看出,这种经典的权限管理算法不仅原理简单易懂,而且具有...

    java权限设置,和java处理字符和二进制的转换

    1. 权限控制算法:我们可以使用位运算来实现权限控制。首先,我们定义每一个操作的唯一整数值,然后使用位运算符来检查用户是否具有某个操作权限。 2. 权限值的计算:我们可以使用位运算来计算用户的权限值。例如,...

    用户登录权限分配的模型与算法实现

    通过采用合理的数据结构和算法设计,不仅能够确保用户登录验证过程的高效性,还能实现灵活的权限控制策略,为MMIS系统的稳定运行提供了坚实的基础。未来的研究工作中,还可以探索更高级别的安全措施和技术,进一步...

    java_jsp项目源码_Smart系统-权限管理与日志记录模块的设计与开发(源代码+论文).rar

    它通过先进的权限控制算法和详尽的日志记录机制,为企业和组织提供了安全、可靠的管理解决方案。 在权限管理方面,Smart系统实现了用户、角色、权限的精细划分。系统内置了丰富的角色类型,如管理员、编辑、普通...

    论文研究-面向产业链协同商务平台的权限控制模型研究.pdf

    分析了产业链企业间协作关系和支持产业链企业间业务协同商务平台的特点,建立了面向动态联盟的四级授权控制模型,对...提出了产业链协同商务平台权限控制算法,并在汽车产业链协同商务平台权限管理中进行了应用验证。

    M1卡密钥控制字算法程序

    总的来说,这个M1卡密钥控制字算法程序为M1卡的安全管理提供了便利,使得用户能够定制化的设置卡片的访问权限,增强了系统的安全性。然而,正确使用这类工具需要理解M1卡的工作原理和相关的加密算法,否则可能会导致...

    编程开发【Java】

    在描述中提到的“通过Java实现一种常用的权限控制算法”,这通常指的是在Java应用中实现访问控制,如RBAC(Role-Based Access Control)角色基础访问控制。这种算法涉及到用户角色的定义、权限分配以及根据角色决定...

    社团管理系统详细设计说明书.pdf

    系统的设计将涉及多种算法,如搜索算法用于快速查找社团信息,排序算法用于展示活动列表,以及权限控制算法确保用户只能访问其权限范围内的功能。程序逻辑需要清晰,确保代码可读性和可维护性。 9. 参考资料 说明书...

    S50及其兼容卡密钥控制字算法程序

    《S50及其兼容卡密钥控制字算法程序详解》 在信息技术领域,智能卡的安全性至关重要,尤其是在涉及数据加密和身份验证的应用中。S50卡是一种广泛应用的非接触式智能卡,常用于门禁系统、公交卡、电子钱包等场景。其...

    某型涡扇发动机起动燃油控制算法研究_余丽平1

    【某型涡扇发动机起动燃油控制算法研究】 在航空发动机设计中,起动特性扮演着至关重要的角色,它直接影响到发动机的安全性和可靠性。对于某型涡扇发动机来说,起动过程中必须具备超温保护机制,以防止在起动期间...

    【控制位】M1卡控制字算法程序.zip

    总结来说,M1卡的控制字算法是其安全机制的重要组成部分,涉及到数据加密、权限控制和错误检测等多个方面。这个程序"【控制位】M1卡控制字算法程序.exe"可以帮助我们更好地理解和操作M1卡的控制字,提升系统的安全性...

    通用权限控制系统设计

    ### 通用权限控制系统设计 #### 权限控制:系统安全与灵活性的关键 权限控制作为信息系统设计中的核心要素,直接影响着系统的安全性和稳定性。在设计阶段,深入理解和实施权限控制策略至关重要。本文旨在探讨如何...

    基于CP-ABE算法的区块链数据访问控制方案.pdf

    数据访问控制机制是指对数据的访问权限进行控制,以确保数据的安全性。在本方案中,数据访问控制机制被用于实现用户级细粒度安全访问控制区块链数据。 知识点5:性能分析 对该方案进行的性能分析表明,该方案具有...

    M1卡密钥控制字算法程序2.0.zip

    使用“M1卡密钥控制字算法程序2.0”时,用户需要了解M1卡的扇区结构和密钥配置规则,例如,每个扇区的第16字节为访问控制字,由四个二进制位组成,分别代表Key A的读(R)、写(W)和Key B的读、写权限。通过合理的...

    电鳗觅食优化算法EEFO

    - **license.txt**:软件许可文件,描述了代码的使用权限和条款。 在MATLAB中实现EEFO算法,需要结合生物启发式优化的基本框架,运用随机数生成、适应度计算、选择、交叉和变异等操作。同时,合理设定参数如种群...

Global site tag (gtag.js) - Google Analytics