`
aaagu1234
  • 浏览: 144953 次
  • 性别: 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_jsp项目源码_Smart系统-权限管理与日志记录模块的设计与开发(源代码+论文).rar

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

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

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

    基于注册系统采用范德蒙矩阵的软件权限控制

    在诸多的加密解密算法中,采用矩阵运算的算法具有速度快,占用内存资源少的优点。...注册码由权限控制字符串加密生成;注册码验证时,把密文解密,与权限控制字符串进行比较,获得使用软件的相应权限。

    论文研究-基于权限验证图的Web应用访问控制漏洞检测.pdf

    针对Web应用中的访问控制漏洞缺乏有效检测手段的问题,提出了一种基于权限验证图的检测算法。首先,在程序控制流图(CFG)的基础上,识别权限验证节点和资源节点,通过T和F边将节点连成权限验证图。然后,遍历资源...

    编程开发【Java】

    1、通过Java实现一种常用的权限控制算法.doc 2、ASP.NET2.0中实现图像转换过滤效果.doc 3、SQL Server连接失败错误故障的分析与排除.doc

    js代码-Zego 权限控制Token生成算法(v3)

    js代码-Zego 权限控制Token生成算法(v3)

    java实现流量控制流量控制

    java实现流量控制java实现流量控制java实现流量控制java实现流量控制java实现流量控制

    JAVA的数据权限设计.docx

    虽然企业中各个单 元的工作流程有所不同,处理的数据对象也有所不同,但是在组织 结构、信息的处理方式上具有很多相同的地方,这就为设计数据对 象的权限控制提供了一个抽象基础。数据权限的控制不同于一般的 功能...

    基于jsp的《计算机算法分析与设计》教辅网站.zip

    《计算机算法分析与设计》教辅网站系统在管理权限上要严格进行控制,具体要求如下: 想登录《计算机算法分析与设计》教辅网站系统进行操作,必须有操作权限,没有权限的用户不能通过任何方式登录系统查看系统的任何...

    基于人脸认证的信息系统权限管理技术研究

    针对现有管理信息系统存在易丢失或被伪造等缺陷,提出了一个基于...在进行关键数据操作时,借助人脸识别算法验证用户是否具有该操作权限,完成权限控制。最后,结合实例说明了该技术如何应用在管理信息系统中。 更多还原

    黄淮学院\考试题\2010-2011

    自主访问控制中用户可以随意地将自己拥有的访问控制权限赋给其他用户,之后还可以将所赋权限撤销,这使得管理员难以确定哪些用户对哪些资源有访问权限,不利于统一的全局访问控制。而强制访问控制规定每个主体都有其...

    Java 基础核心总结 +经典算法大全.rar

    访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch ...

    SSM项目基于Apriori算法的网络书城.zip

    7. **权限控制**:实现多角色登录,如普通用户、会员、管理员等,根据角色分配不同的操作权限,保障数据安全。 8. **界面友好**:采用清晰的界面设计,使用户易于上手,快速熟悉各项操作。 9. **易于维护**:后端...

    SSM项目协同过滤算法的离散数学题推荐系统.zip

    7. **安全性和可扩展性**:系统在用户认证、权限控制等方面进行了严格的设计,以确保数据的安全。同时,系统的模块化设计和遵循的编码标准也便于未来的升级和维护。 总的来说,SSM项目协同过滤算法的离散数学题推荐...

Global site tag (gtag.js) - Google Analytics