如何在标志中检查权限

How to check permission in flag?

本文关键字:检查 检查权 权限 标志      更新时间:2023-09-26

用户拥有12 权限

12=1100

8=1000=创建
4=0100=读取
2=0010=更新
1=0001=删除

如何检查此用户是否具有创建权限?

使用按位AND运算符(&),如下所示:

if ((flag & 0x08) == 0x08) {
    // They have it
}

(0x08十六进制=1000二进制=8十进制。)

&获取操作数并返回一个值,该值仅包含在两个操作数中设置的位(在将操作数转换为标准2的补码32位整数之后)。所以0x0C & 0x080x08,因为在两个操作数中都设置了0x08位,但(比如)0x07 & 0x080x00,因为其中一个操作数没有设置该位。

如果您正在检查一个您知道只包含一位的值(如0x08),则实际上不需要== 0x08部分,这很好:

if (flag & 0x08) {
    // They have it
}

但是如果您有需要使用多个位进行检查的掩码,如0x0A,则需要==,因为否则0x080x02以及0x0A的结果都是真实的。因此,使用模式(thingToTest & flagToTestFor) == flagToTestFor是一个很好的习惯

您不必使用十六进制,但我发现它在处理位时很方便(因为JavaScript没有文本二进制表示法)。或者,您可能会考虑在代码开头声明的一些"常量"(在ES6中可以是常量,但现在我们将使用ES5):

var CREATE_FLAG = parseInt("1000", 2);
var READ_FLAG   = parseInt("0100", 2);
var UPDATE_FLAG = parseInt("0010", 2);
var DELETE_FLAG = parseInt("0001", 2);

然后你就可以做CCD_ 21了。