使用2的权限存储权限:可以创建视图吗?

时间:2011-12-12 14:38:47

标签: sql sql-server

给出一个表DocumentTypes

TypeID | Document Type
‾‾‾‾‾‾‾|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
1      | Type1
2      | Type2
3      | Type3
4      | Type4

我正在创建一个表Permission

UserID | Permission
‾‾‾‾‾‾‾|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
ID1    | ???
ID2    |
ID3    |

计划是计算Permission = Sum{2^(TypeID)}

因此,如果User1需要获得Type1Type3Type4的许可,我会存储2+8+16 = 26

所有内容都设置为以这种方式添加和删除权限。我可以使用Stored Procedure来查看权限(每个权限都在自己的行中)。

有没有办法使用View代替Stored Procedure

1 个答案:

答案 0 :(得分:1)

您需要使用位掩码。

如果你使用BITWISE和BITMASK,你只会得到你感兴趣的位。所以,如果(x & 2) = 2,你知道2 bit的{​​{1}}被设置了。使用它,你可以这样做......

x


如果你想让每个人都拥有自己的行,要么将它们PIVOT,要么加入一个列出权限的表和他们使用的位掩码......

SELECT
  value,
  CASE WHEN (value &  1) =  1 THEN 'flag01 set' ELSE '-' END       AS flag01,
  CASE WHEN (value &  2) =  2 THEN 'flag02 set' ELSE '-' END       AS flag02,
  CASE WHEN (value &  4) =  4 THEN 'flag04 set' ELSE '-' END       AS flag04,
  CASE WHEN (value &  8) =  8 THEN 'flag08 set' ELSE '-' END       AS flag08,
  CASE WHEN (value & 16) = 16 THEN 'flag16 set' ELSE '-' END       AS flag16,
FROM
  permissions