【问题标题】:Bitmasks to check who has access检查谁有权访问的位掩码
【发布时间】: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 这样,如果至少一位匹配,则公式为真。跨度>

标签: bit-manipulation bitmask


【解决方案1】:

我找到了这个问题的答案。如果至少要匹配一位,我可以检查公式的结果是否大于或等于 1: USER & PAGE >= 1 这样,如果至少一位匹配,则公式为真。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-04
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多