红宝石咬了一下

时间:2010-10-05 21:04:35

标签: ruby security bit-manipulation

我想创建一个包含给定用户安全权限的位。

在c#中,我会通过创建一个枚举来做到这一点,然后我会对二进制值进行一些操作,通过和'和&&'看它是否会产生一个真值。

如何在Ruby中做到最好?

3 个答案:

答案 0 :(得分:12)

如果基础值很重要,那么您可以创建一个像枚举一样使用的模块

module Groups
  ADMIN = 1
  BOSS = 2
  CLERK = 4
  MEAT = 8
  BREAD = 16
  CHEESE = 32
end

将权限按位or一起设置

permissions = Groups::BOSS | Groups::MEAT | Groups::CHEESE

并测试你做一个按位and

>> permissions & Groups::CHEESE > 0
=> true
>> permissions & Groups::BREAD > 0
=> false

我也喜欢如何使用_这样的

来使实际的位掩码更具可读性
permissions = 0b0010_1010

答案 1 :(得分:4)

Bitwse操作在Ruby中是微不足道的。

> 1 | 2 # Create a bitmask from permission 2^0 + 2^1
=> 3

> 3 & 1 == 1 # See if the bitmask contains the 2^0 permission
=> true

> 3 & 4 == 4 # See if the bitmask contains the 2^2 permission
=> false

答案 2 :(得分:1)

Ryan Bates谈到了使用按位运算在这个podcast中嵌入关联。您可以阅读文字版here