红宝石咬了一下

Bla*_*man 5 ruby security bit-manipulation

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

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

我怎样才能在Ruby中做到最好?

Jon*_*röm 12

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

module Groups
  ADMIN = 1
  BOSS = 2
  CLERK = 4
  MEAT = 8
  BREAD = 16
  CHEESE = 32
end
Run Code Online (Sandbox Code Playgroud)

要将权限按位设置or在一起

permissions = Groups::BOSS | Groups::MEAT | Groups::CHEESE
Run Code Online (Sandbox Code Playgroud)

并测试你做一点点 and

>> permissions & Groups::CHEESE > 0
=> true
>> permissions & Groups::BREAD > 0
=> false
Run Code Online (Sandbox Code Playgroud)

我也喜欢你如何可以使实际使用位掩码更具可读性_像这样

permissions = 0b0010_1010
Run Code Online (Sandbox Code Playgroud)