使用位运算进行权限管理

之前学习redis时,深刻的体会到了位运算的巧妙,现在和大家一起来分享一下

使用位图法统计活跃用户

首先假设我们一共统计32个用户是否连续登陆一个周,那么我们可以使用32个bit位分别代表这个32个用户来进行判断

假设结果如下

周一  1010    1100    0100    0011    1001    0010    0100    1001

周二   0011    0001    1011    0001   1011    0111    1100    1100

周三   0011    0001    1011    0001   1011    0111    1100    1100

周四..........

这样,我们就拿到了一个周的用户登陆信息,其中为1表示用户登陆,为0表示没有登陆,最后我们再通过与运算,这样就得到了活跃的用户id。

好了,现在开始说明使用位运算来进行权限的管理

public class Permission {
    public static final int Allow_SELECT =1<<0; //二进制  0001
    public static final int Allow_INSERT =1<<1; //        0010
    public static final int Allow_UPDATE =1<<2; //        0100
    public static final int Allow_DELETE =1<<3; //        1000
    private int flag;
    //设置用户的权限
    public void setPer(int per){
        flag=per;
    }
    //增加用户的权限
    public void enable(int per){
        flag=flag|per;
    }
    //删除用户的权限,传入要删除的权限,进行与运算后
    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));
    }
}

这样就完成了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值