java 位 权限_java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限...

java &|~<<   位运算设计权限代码!查询权限、增加权限、删除权限

关于二进制 转换 &|~^>><<>>> 请参考我前几篇博文

d542e836356d96061abc817c71f4505e.png

package org.rui.temp;

public class Permission {

/**

* @author liangrui

* @qq 1067165280

* 这种算法的一个优点是速度快

*/

/******************************************

* 这是做测试相当于从数据库里取出的权限值 /一般根据一个模块id 取出它的crud 值就可以了

删除A---0

修改A---1

添加A---2

删除B---3

修改B---4

添加B---5

...... 理论上可以有N个操作

用户有权限:添加A---2;删除B---3;修改B---4

2的2次方+2的3次方+2的4次方=28purview权限值

*******************************************/

static int purview=28;

static int BdelPermi=3;//删除B=3

static int BaddPermi=5;//添加B=5

static int BupdaetPermi=5;//修改B==4

public static void main(String[] args) {

//根据用户拥有的权限值,和功能模块的权限值来判断 用户是否拥有该操作模块的权限

isPermission(purview, BdelPermi, BaddPermi, BupdaetPermi);

/**

* purview 用户当前权限值

* newValue 权限值

* flag= true 为增加,false 删除

*/

int modePermValue=3; //相关模块的id 这里做测试 就省略

//删除B---3 这里做测除测试

int newValue=3;

boolean flag=false;

//更改用户的权限

purview=setPermission(purview,modePermValue,newValue,flag);

System.out.println("-------------修改权限后------------------------");

//再一次查询相关权限

isPermission(purview, BdelPermi, BaddPermi, BupdaetPermi);

//添加B---5 这里做为用户增加一个权限

newValue=5;

flag=true;

//更改用户的权限

purview=setPermission(purview,modePermValue,newValue,flag);

System.out.println("-------------修改权限后------------------------");

//再一次查询相关权限

isPermission(purview, BdelPermi, BaddPermi, BupdaetPermi);

}

private static void isPermission(int purview, int BdelPermi, int BaddPermi,

int BupdaetPermi) {

// 通过移位得到权限的二进制码

int Bdel=1<

int Badd=1<

int Bupd=1<

//也可以写成

/*int Bdel=(int)Math.pow(2, BdelPermi);

int Badd=(int)Math.pow(2, BaddPermi);

int Bupd=(int)Math.pow(2, BupdaetPermi);*/

//System.out.println("删除b权限取次方后的结果:"+Bdel);

//System.out.println("添加b权限取次方后的结果:"+Badd);

/**

1000=8=Bdel

&11100=28=用户的权限值

-------

01000=8结果

(1000=1000)8==8用户拥有删除b的权限

*/

//System.out.println(Integer.toBinaryString(28));

boolean permission;

//能过用户拥有的权限值 &(与) 功能模块的权限值的二进制 运算的结果和 ==功能模块的权限值 做比较判断

//true 用权限 false 为无权限

System.out.println("是否有删除b权限操作权限: "+((purview&Bdel)==Bdel));

System.out.println("是否有添加b权限操作权限: "+((purview&Badd)==Badd));

//判断是否有多个权限

permission=(purview&(Bdel))==(purview&(Badd))?true:false;

System.out.println("是否同时有添加b和 删除b 操作:"+permission);

permission=(purview&(Bupd))==(purview&(Badd))?true:false;

System.out.println("是否同时有修改b和 删除b 操作:"+permission);

}

/**

* 更改用户的权限

* modelID 这里应该到数据库去查询作为条件 这里省略,明白就好

* 这里主要是为了测试,实际应用时应该传入的都是相关对象数据

*/

private static int setPermission(int purview, int modelID,

int newValue, boolean flag) {

// 通移位得到操作权限码

int temp=1<

if(flag){//增加

//与当前权限进行或操作

purview=purview|temp;

}else{//删除

//先取反 再和当前权限进行与操作

temp=~temp;

purview=temp&purview;

}

//返回当前用户拥用的结果根限

return purview;

}

}

关于<

package org.rui.temp;

public class GetBin {

/**

* @param 根据权限值来进行位运算,二进制进多少位

*/

public static void main(String[] args) {

int val=3;

//System.out.println(Integer.toBinaryString(val));

//32位来运算的,前面的0这里省略

System.out.println(1<<0);//01<<0=01=1

System.out.println(1<<1);//01<<1=010=2

System.out.println(1<<2);//01<<2=0100=4

System.out.println(1<<3);//01<<3=01000=8

System.out.println(1<<4);//01<<4=010000=16

System.out.println(1<<5);//一直断续.......

System.out.println(1<<6);

System.out.println(1<<7);

System.out.println(1<<8);

System.out.println(1<<9);

System.out.println(1<<10);

System.out.println(1<<11);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值