`
duyouhua1214
  • 浏览: 227778 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JAVA常见的权限控制算法的实现

阅读更多

删除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;
}
  当然,多权限的验证只要扩展一下就可以了。
  几点注意事项:首先,一个系统可能有很多的操作,因此,请建立数据字典,以便查阅,修改时使用。其次,如果用数据库储存用户权限,请注意数值的有效范围。操作权限值请用唯一的整数。

 

来源:http://www.zxbc.cn/html/20070426/7587.html

分享到:
评论
1 楼 天塔上的猫 2012-04-27  
/**
 * JAVA常见的权限控制算法的实现
 * 
 */
package sicau.edu.cn.iteye;

/**
 * @author ps
 *
 * @date 2012-4-26
 */
public class Authority {
	
	//权限元素列表
	
	int del_a = 0;  
	int add_a = 1; 
	int upd_a = 2; 
	
	int del_b = 3;
	int add_b = 4;
	int upd_b = 5;
	
	
	/**
	 * 输入参数为无限个权限元素  
	 * @param nums 拥有的权限
	 * @return 得到权限
	 */
	public int getPrivilege(int ... nums){
		
		int tot = 0;
		
		for(int i :nums){
			
			System.out.println("添加权限 " + i);
			tot = (int) (tot + Math.pow(2,i));
			 
		}
		
		System.out.println("总权限为"+tot);
		return tot;
	} 

	/**
	 * 判定tot是否有pri权限
	 * @param tot
	 * @param pri
	 * @return
	 */
	public boolean  isown(int tot,int ... pris){
		int temp =0;
		for(int pri :pris){
		temp   = temp + (int) Math.pow(2,pri);
		}
		
		return (tot&temp) == temp?true:false;
		
	}
	
	public static void main(String arg[]){
		
		Authority ao = new Authority();
		
		int key  =  ao.getPrivilege(ao.del_a,ao.add_b,ao.upd_b);
		
		System.out.println("权限和" +key);
		
		System.out.println("是否有权限 " +ao.isown(key, ao.upd_b));
	}
	
}


这文章不错啊  博主所说的应该就是上面的实现 
有个问题  权限的是有限个的 因为让int的范围限制住了

相关推荐

    Java权限控制的算法

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

    java实现流量控制流量控制

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

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

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

    java源码包---java 源码 大量 实例

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包4

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包3

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA的数据权限设计.docx

    员通过数据权限模块的接口调用得到己实现数据权限控制的SQL语 句,这样也算做到的代码的低侵入。 SQL语句高效解析处理 数据权限模块的核心之一就有SQL语句的高效解析处理,SQL处 理指根据当前登录人信息及数据权限...

    JAVA上百实例源码以及开源项目源代码

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    JAVA上百实例源码以及开源项目

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java源码包2

     Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流。 Java绘制图片火焰效果 1个目标文件 摘要:Java源码,图形操作,火焰...

    java开源包4

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    Java毕业设计-基于Java的两个通用安全模块的设计与实现.rar

    **权限控制模块**:采用基于角色的访问控制模型(RBAC),实现对系统资源的细粒度管理。该模块支持自定义角色和权限,方便管理员根据实际需求进行配置。同时,提供动态权限分配功能,可根据用户的行为和属性动态调整...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java访问权限控制源代码 1个目标文件 摘要:Java源码,文件操作,权限控制 Java访问权限控制,为Java操作文件、写入文件分配合适的权限,定义写到文件的信息、定义文件,输出到c:/hello.txt、写信息到文件、关闭输出流...

    java开源包3

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包11

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包6

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包9

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包101

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包5

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

    java开源包8

    最短路径算法实现 k-shortest-paths 这是一个实现了 Yen 的排名算法的无环路径的项目 Java日历空间 JCalendarButton JCalendarButton是一个简单的java swing日历选择控件。它能够在日期输入框后面弹出一个日历。 ...

Global site tag (gtag.js) - Google Analytics