java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限
来源:互联网 发布:淘宝店铺降权有通知吗 编辑:程序博客网 时间:2024/05/21 11:23
java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限
关于二进制 转换 &|~^>><<>>> 请参考我前几篇博文
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=3static int BaddPermi=5;//添加B=5static int BupdaetPermi=5;//修改B==4public 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<<BdelPermi;int Badd=1<<BaddPermi;int Bupd=1<<BupdaetPermi;//也可以写成/*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<<newValue;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=1System.out.println(1<<1);//01<<1=010=2System.out.println(1<<2);//01<<2=0100=4System.out.println(1<<3);//01<<3=01000=8System.out.println(1<<4);//01<<4=010000=16System.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);}}
3 0
- java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限
- SqlServer位运算 权限设计
- PHP位运算权限设计
- php位运算的权限设计
- java 位运算权限管控(转载)
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 权限
- 基于CAS实现单点登录(SSO):工作原理
- 更改DataTable中的数据
- C语言中变量声明和定义----笛风读书笔记系列
- 数字图像处理—图像分割—并行区域—连通区域标记(像素标记)(4-连通情况)
- android环境搭建
- java &|~<< 位运算设计权限代码!查询权限、增加权限、删除权限
- 为什么你不当程序员了
- 在虚拟机(centos)配置postgresql数据库(2) - 配置篇
- 多线程基础总结 之 -- ConcurrentLinkedQueue
- 我写过的软件之CmmbHst
- 仿京东搜索界面,姑且叫做标签式布局吧
- bombing:cocos2d-x应用窗口相关源码剖析3
- mvc3 jquery post 复杂json
- Java多线程总结之聊一聊Queue