【基于二进制的&运算的权限设计】

先说结论,基于2的倍数的数字相加 ,当一个数与改累加的和做与运算,如果得到的结果是他本身说明该值在这个累加的所有的值中的一项。

先来看一组数据

1,2,4,8,16对应的二进制分别是

0001,0010,0100,1000,10000

(1+2+4+8+16)&1=1

(1+2+4+8+16)&2=2

(1+2+4+8+16)&4=4

(1+2+4+8+16)&16=16

(1+8)&4=0

(1+4+8)&16=0

之前的项目有个这样的业务场景

有一个课程可以开放给不同等级的会员

假设一级为1二级为2三级为4四级为8

开放给所有会员就是所有等级相加 1+2+4+8=15

判断有没有权限使用

会员等级&15 得到结果如果是本身说明该会员有权限,否则就是没有权限。

在mysql中

假设有下面一个表

idcode
16
212

假设id=1的code为2+4

id=2的值为8+4

现在有一个会员等级为4的用户,查询结果

select*from test where code&4=4

结果为id=1和2  有两个

select *from  test where code&8=8

查询结果只有id=2 只有一个

select *from test where code&1=1

查询结果为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值