`
chyx72
  • 浏览: 34242 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转]一种常用的权限控制算法的实现

    博客分类:
  • JAVA
阅读更多
转:http://pcedu.pconline.com.cn/empolder/gj/java/0607/835188.html
这里笔者介绍一种很常用,也比较专业的权限控制思路。这里用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;
}

  当然,多权限的验证只要扩展一下就可以了。

  几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数!

分享到:
评论

相关推荐

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

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

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

    一种常用的权限控制算法的实现,是一个论坛曾经用的,比较有代表性和通用性

    论文研究-一种灵活的访问控制策略及其应用研究.pdf

    提出了一种声明式的、面向对象的、灵活访问控制策略的形式化描述、决策算法和实施框架。与传统访问控制策略相比,它包含授权类型、主体、权限、限制、影响等策略元素,能够更加精确地描述各类控制需求;同时,提出的...

    论文研究-一种多租户授权管理访问控制模型.pdf

    针对云服务中多租户应用面临越权访问和联合恶意攻击问题,综合聚类思想和基于密文策略的属性加密(CP-ABE)提出一种多租户授权管理访问控制模型(MTACM)。该模型根据多租户的业务特点将角色任务聚类为任务组,并...

    编程开发【Java】

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

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

    __C_____是最常用的一类访问控制机制,用来决定一个用户是否有权访问一些特定客体的一种访问约束机制。 A、强制访问控制 B、访问控制列表 C、自主访问控制 D、访问控制矩阵 SYN风暴属于___A____攻击。 A、拒绝...

    一种基于网络的软件保护方案

    此方案从控制软件的下载权限开始,之后在用户下载软件的同时利用DES对称加密算法加密网卡MAC地址形成了唯一的注册码,最后在软件客户端加上注册模块并通过对注册表的读写操作,实现了将软件绑定在下载软件的计算机上...

    《计算机操作系统》期末复习指导

    操作系统(Operating System,OS),是一种软件,属于系统软件; 1、科普的观点 操作系统是计算机系统的管理和控制中心,它依照设计者制定的各种调度策略组织和管理计算机系统资源,使之能高效地运行。 2、功能...

    论文研究-基于Bloom Filter的混合云存储安全去重方案.pdf

    针对现有云存储系统中数据去重采用的收敛加密算法容易遭到暴力破解以及猜测攻击等不足,提出一种基于布隆过滤器的混合云存储安全去重方案BFHDedup,改进现有混合云存储系统模型,私有云部署密钥服务器Key Server支持...

    论文研究-——无需水平集重新初始化 .pdf

    在Peer-to-Peer(P2P)环境中管理复杂的空间数据,首先需要建立空间数据索引。...P2PQR-tree数据组织更加合理、能够更好地支持元数据管理、易于实现权限控制、减少了分布式索引变化,更好地适应了对等网络的动态特性。

    数据库管理原型系统.doc

    说明:1-6必做,其中每一项包含多个算法时,任选一个算法实现。 实践项目六 数据库恢复 一.实验目的 掌握利用日志进行数据库恢复的方法。 二. 实验内容 1、根据用户操作形成日志,包括两种日志 (1)REDO日志 (2...

    程序员简历模板java开发工程师

    2.用户注册,采用RBAC权限控制,实现用户选择注册不同类型的帐号,所实现的功能不一样,用户密码采用md5加盐加密算法存储。 3.发起众筹项目,这是项目创业者所拥有的功能,将数据存入mysql数据库,通过mycat实现。 4...

    论文研究-支持动态协作的委托授权意愿协商.pdf

    委托授权是为了实现资源共享与协作, 在主体之间进行的一种灵活授权方式, 是将自己拥有的某些权限转授给他人. 现有工作主要针对委托授权的时效性、单调性、委托深度、广度...

    论文研究-普适计算环境下基于信任度的模糊自适应访问控制模型.pdf

    在信任模型基础上,提出一种基于信任度的模糊自适应访问控制模型。该模型扩展信任度的概念,建立权限的区间值模糊策略规则,通过对与主体相关的上下文信息的模糊推理实现授权的有效控制。描述模型的构成要素,研究...

    asp.net知识库

    .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 ...

Global site tag (gtag.js) - Google Analytics