6

我有一个用户表,其中有一个位掩码字段,其中有一个权限掩码。在本地,我可以通过执行 bitmask 来确定用户是否具有一定的权限(UserPermissions&Perm)==Perm。但是,我希望能够发出 afind_by_mask或类似的东西,也许使用 a :conditions,但我似乎不知道如何查询数据库以检索具有匹配权限掩码的用户列表。

使用 ActiveRecord 的任何想法?

具体来说,这必须使用 sqlite 和 postgres

4

1 回答 1

17

在我看来,明智的做法是将您的位掩码字段分解为一系列布尔字段。在关系数据库中存储位掩码与在字段中存储分隔列表并不遥远——它是边界非规范化。

也就是说,您可以使用 & 运算符在 SQL 查询中使用按位与,因此您可以说:

User.where('permissions & ? > 0', Perm)
于 2010-08-02T04:16:52.370 回答