Bitmasks来检查谁有权访问

时间:2014-02-26 12:19:12

标签: bit-manipulation bitmask

我有几个页面包含访问位掩码,它只限制对给定用户的访问。每个用户都有自己的访问位掩码,用于与页面位掩码进行比较。

例如,我有以下页面和用户位掩码:

USER 0100
PAGE 0101

要检查用户是否有权访问某个页面,我会在页面和用户访问代码之间执行按位AND操作。如果此类操作的结果等于用户位掩码,则授予访问权限。

USER & PAGE == USER   <--- ACCESS OK
USER & PAGE != USER   <--- NO ACCESS

对于上面的示例:

0100 & 0101 == 0100   <--- ACCESS OK

我的解决方案很有效,直到我创建了一个具有更广泛访问权限的用户:

USER 1100
PAGE 0101

1100 & 0101 = 0100   <--- NO ACCESS

用户位掩码中的附加位破坏了我的访问验证方法。我该如何解决?

要授予访问权限,对于USER和PAGE位掩码之间的AND操作,至少有一位必须返回“true”。

1 个答案:

答案 0 :(得分:0)

我找到了这个问题的答案。如果必须匹配至少一个位,我可以检查公式的结果是大于还是大于1:USER&amp; PAGE&gt; = 1这样,如果至少有一位匹配,公式将为真。