首页 > 其他分享 >利用位运算做权限控制

利用位运算做权限控制

时间:2022-11-30 14:31:34浏览次数:38  
标签:运算 permission int per 利用 flag ALLOW 权限 public


位运算应用范围十分广泛,下面这个例子就是用来做权限控制

类似于linux的文件系统里面的chmod 777   

节约内存空间,一个数据机构就能表示多种权限

直接上代码吧: 

package com.caojiulu;
/**
*@author caojiulu
*
*类说明:
*/
public class Permission {

// 是否允许查询,二进制第1位,0表示否,1表示是
public static final int ALLOW_SELECT = 1 << 0; // 0001 = 1

// 是否允许新增,二进制第2位,0表示否,1表示是
public static final int ALLOW_INSERT = 1 << 1; // 0010 = 2

// 是否允许修改,二进制第3位,0表示否,1表示是
public static final int ALLOW_UPDATE = 1 << 2; // 0100 =4

// 是否允许删除,二进制第4位,0表示否,1表示是
public static final int ALLOW_DELETE = 1 << 3; // 1000 = 8
// 存储目前的权限状态
private int flag;
//设置用户的权限
public void setPer(int per) {
flag = per;
}
//增加用户的权限(1个或者多个)
public void enable(int per) {
flag = flag|per;
}
//删除用户的权限(1个或者多个)
public void disable(int per) {
flag = flag&~per;
}
//判断用户的权限
public boolean isAllow(int per) {
return ((flag&per)== per);
}
//判断用户没有的权限
public boolean isNotAllow(int per) {
return ((flag&per)==0);
}

public static void main(String[] args) {
int flag = 15;
Permission permission = new Permission();
permission.setPer(flag);
permission.disable(ALLOW_DELETE|ALLOW_INSERT);
System.out.println("select = "+permission.isAllow(ALLOW_SELECT));
System.out.println("update = "+permission.isAllow(ALLOW_UPDATE));
System.out.println("insert = "+permission.isAllow(ALLOW_INSERT));
System.out.println("delete = "+permission.isAllow(ALLOW_DELETE));


}
}

标签:运算,permission,int,per,利用,flag,ALLOW,权限,public
From: https://blog.51cto.com/u_14906615/5899444

相关文章

  • SQL中的并、交、差运算
    SQL中的并、交、差运算1、交(对应于集合中的交集操作,A∩B)注:返回查询结果中相同的部分既他们的交集,想保留所有的重复,必须用INTERSECTALL代替INTERSECT(select*fromtab......
  • 位运算
    位运算的基本操作1.求n的二进制表示中第k位是几(1)先把第k位移到最后一位n>>k;(2)看个位是几n&1;#include<bits/stdc++.h>usingnamespacestd;intmain()......
  • windows 利用IIS环境配置FTP目录以及用户隔离
    1、安装IIS(轻车熟路暂不赘述)2、如果需要满足不同用户根据不同账号登录FTP首先在Windows的用户管理中建立不同的用户3、IIS上建立FTP站点,   设置为: 授权规则......
  • ubuntu下使用conda安装出现权限不足的问题
    首先进入anaconda3文件夹cd/usr/local/anaconda3然后为当前用户授权可以更改anaconda3文件夹sudochown-R当前用户名/usr/local/anaconda3再次安装condainstal......
  • day03--运算符
    运算符算术运算符:+,-,*,/,%(取余),++,--赋值运算符:=关系运算符:>,<,>=,<=,==,!=,instanceof逻辑运算符:&&(与),||(或),!(非)自增自减运算符inta=3;intb=a++;//先运行b......
  • 权限管理
    6.1、文件与目录(chmod)语法:chmod[选项]权限模式文件名或目录名选项:-R递归,给目录下的所有文件设定权限。权限模式:方法一:三部分组成,用户身份、赋权方式、权限。用户......
  • Unity-利用SkinnedMeshRenderer和Mesh的BindPose实现骨骼动画
    SkinnedMeshRenderer蒙皮网格渲染器。蒙皮是指将Mesh中的顶点附着(绑定)在骨骼之上,而且每个顶点可以被多个骨骼所控制。骨骼是皮肤网格内的不可见对象,它们影响动画过程中网格......
  • 二进制数的高精度运算
        我们知道,一个int型整数一般用32位二进制数存储,所表示的最大整数值为231-1,对应1个10位的十进制整数。因此,一个更大的整数可能需要更多的二进制位来存储,在处理......
  • 账号和权限管理
    一、用户账号1、Linux三大用户类型1)超级管理员:最高权限拥有者2)普通用户:权限受限的用户3)程序用户:不是给人用的,是给程序使用的 2、Linux组1)基本组:有......
  • Android 运行时权限终极总结
    目录​​一:基础&起因​​​​二:基本使用​​​​2.1 Activity当中的一般用法​​​​2.2Fragement中的用法​​​​三:注意事项和打电话例子​​​​3.1注意事项​​​​3......