`
shaohan126448
  • 浏览: 116189 次
  • 来自: 北京
社区版块
存档分类
最新评论

权限管理控制算法(位与算)

    博客分类:
  • java
阅读更多

最近在网上查找一些关与位与运算的资料,看到一篇觉得可以收藏的贴子,贴出来抛砖引玉
----------------------------------------------------------------------------------------
这里我介绍一种很常用,也比较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次左移而已,因此并不会占用太多的资源。当然,对于一些极端情况,可能并不是一种很好的解决方案,但对于一般的中小型系统,已经足够应付!此处只是对一种算法的介绍,并不带任何的排它性!!

分享到:
评论

相关推荐

    经典权限管理算法

    本文将围绕一种经典的权限管理算法展开讨论,通过对算法原理的解析以及示例代码的展示,帮助读者深入理解这种算法的应用场景与实现方式。 #### 二、算法原理 该算法基于二进制位运算来实现权限管理。通过为不同的...

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

    通过这种方式,不仅简化了权限管理的过程,还提高了系统的效率和安全性。对于开发者而言,了解并掌握这一算法对于构建高效且安全的应用程序至关重要。在未来的设计和开发过程中,可以灵活运用此类算法来实现更加复杂...

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

    ### 用户登录权限分配的模型与算法实现 #### 一、引言 随着计算机硬件技术和软件平台的快速发展,军事管理信息系统(Military Management Information System,简称MMIS)已成为军队现代化管理的重要工具之一。...

    采用按位与(&)按位或(-)算法的简单权限实例

    通过阅读和分析这个代码,我们可以更深入地理解如何在实际项目中应用按位与和按位或运算符来构建高效且灵活的权限管理系统。代码可能包括定义权限掩码的常量、检查用户权限的函数以及赋予或修改用户权限的接口。 ...

    用户权限管理模块(C++实现)

    在IT行业中,权限管理系统是软件应用中的重要组成部分,它用于控制不同用户对系统资源的访问。本项目"用户权限管理模块(C++实现)"是一个用C++编程语言实现的权限管理解决方案,它包含了几个核心功能,如单例模式、...

    通用权限管理系统

    权限管理是控制用户访问资源的一种机制,其核心目标是确保只有拥有相应权限的用户才能执行特定的操作。在多后台系统中,权限管理尤为重要,因为它能防止未授权的访问,保护敏感信息,同时提高系统的安全性与稳定性。...

    M1卡密钥控制字算法程序

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

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

    该程序"【控制位】M1卡控制字算法程序.exe"很可能是用于生成或解析M1卡的控制字的工具,帮助开发者或者系统管理员理解并管理卡片的安全设置。在使用这个程序时,用户可能需要输入特定的参数,如卡片的扇区、块号以及...

    权限管理源代码

    "权限管理源代码"通常涉及到一系列的技术和概念,包括用户认证、授权、角色管理和权限控制等核心要素。下面我们将深入探讨这些关键知识点。 1. **用户认证**:这是权限管理的第一步,它验证用户的身份。常见的认证...

    jsp用户权限管理系统

    【jsp用户权限管理系统】是一个基于JavaServer Pages(JSP)技术构建的权限管理解决方案,用于控制用户对系统资源的访问和操作。这个系统通常包括一套完整的界面,旨在提供美观且功能丰富的用户体验。根据描述,该...

    用户权限管理 v2.0

    在计算机系统中,权限管理是控制不同用户对系统资源访问的关键机制。它包括用户账户的创建、分配权限以及权限的调整。在Windows 2000中,用户账户可以被组织到用户组中,一个用户组可以拥有特定的权限集,组内的所有...

    基于角色权限管理PDM图

    标题中的“基于角色权限管理PDM图”指的是在软件开发中使用的一种设计模式,即“基于角色的权限控制”(Role-Based Access Control, RBAC)。PDM是“产品数据管理”(Product Data Management)的缩写,通常用于管理...

    权限控制与安全管理设计文档

    随着信息技术的快速发展,企业对内部系统的安全性及权限管理提出了更高的要求。本设计文档旨在详细介绍一个完整的权限控制与安全管理系统的设计思路,涵盖API权限控制的各个方面,确保系统的稳定运行与数据的安全。 ...

    包含部门树与权限模块树的权限管理

    在IT行业中,权限管理是系统开发中的重要组成部分,特别是在企业级应用中,它涉及到用户对资源的访问控制,确保数据安全。本项目“包含部门树与权限模块树的权限管理”是一个基于Java实现的详细权限管理系统,利用了...

    php下的权限算法的实现

    这种方法常用于简单的权限控制,将权限分为不同的位,如添加(1)、浏览(2)、删除(4)和修改(8)。每个位对应一个2的幂次,用户权限值为这些位的组合。例如,权限值为7(1+2+4)的用户拥有添加、浏览和删除权限...

    权限管理中的机器学习与大数据.pptx

    - **与分布式账本技术的结合**:探索机器学习算法与区块链等分布式账本技术的结合,构建更安全透明的权限管理系统。 **4. 数据要求** - **数据收集与准备**:收集大量的高质量数据用于训练和评估机器学习算法。 - ...

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

    《M1卡密钥控制字算法程序2.0——深入理解与应用》 在智能卡技术领域,M1卡(也称为Mifare Classic卡)因其广泛应用而备受关注,尤其在门禁、公交卡等非接触式IC卡系统中。本篇文章将详细探讨“M1卡密钥控制字算法...

    算法集成开发手册.pdf

    算法库是按标准定义的算法的集合,可以实现算法检索、下载、共享、修改、升级、删除,版本管理等功能。 算法的改造主要包括输入输出改造、DI和EI的改造。其中,输入改造是指对算法输入部分进行改造以适应新的数据...

Global site tag (gtag.js) - Google Analytics