【发布时间】:2014-02-26 12:19:12
【问题描述】:
我有几个页面包含访问位掩码,这些位掩码将访问权限限制为仅给定用户。每个用户都有自己的访问位掩码,用于与页面位掩码进行比较。
例如,我有以下页面和用户位掩码:
USER 0100
PAGE 0101
为了检查用户是否可以访问页面,我在页面和用户访问代码之间执行按位与运算。如果此类操作的结果等于用户位掩码,则授予访问权限。
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”。
【问题讨论】:
-
To grant access, at least one bit must return "true" for AND operation between USER and PAGE bitmasks.你之前关于 USER & PAGE == USER -
这个公式的问题是当用户拥有更多权限时,它会使公式为假。例如 0100 & 0101 = 0100 (OK), 1100 & 0101 = 0100 (FALSE)
-
我找到了这个问题的答案。如果至少要匹配一位,我可以检查公式的结果是否大于或等于 1: USER & PAGE >= 1 这样,如果至少一位匹配,则公式为真。跨度>