PHP位运算与或异或

应用场景:
你是否遇到过这样的问题?我现在有个功能有很多权限控制,但是我不能使用很多字段用1,0来存储这么多权限,这样做感觉太low了,而且判断起来需要用到很多字段,维护起来好麻烦,后期如果再新增其他权限还需要新增字段。
下面用一个简单的小技巧告别这种不科学和反人类的设计吧!
这里只需要用到几个php的位运算,参照php官方文档
PHP位运算与或异或
文章图片

所以我们只需要用一个十进制数字来存储这些权限即可,十进制转换为二进制后的每一位都代表一个权限,为1则有权限,为0则无权限。
show me the code!

这样就可以通过一个字段来实现多个权限的控制啦!
例如audit_type为14
二进制:1 1 1 0
write二进制:0 0 1 0
read二进制:0 1 0 0
high二进制:1 0 0 0
audit_type & write 的时候就得到二进制 0 0 1 0,十进制2
audit_type & read 的时候就得到二进制 0 1 0 0,十进制4
audit_type & high 的时候就得到二进制 1 0 0 0,十进制8
audit_type ^ write 的时候就得到二进制 1 1 0 0,可以看到这样做就会把write的位置为0,也就是取消了权限,同理可以取消其他权限
audit_type为0想加权限
audit_type | write 的时候就得到二进制 0 0 1 0,十进制2
audit_type | write | read 等
【PHP位运算与或异或】总结:
只要定义好各个权限的数值就可以通过下面的操作来进行权限控制了
使用或 | 来加权限
使用与 & 来判断权限
使用异或 ^ 来去除权限

    推荐阅读