给出一个表DocumentTypes
:
TypeID | Document Type
‾‾‾‾‾‾‾|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
1 | Type1
2 | Type2
3 | Type3
4 | Type4
我正在创建一个表Permission
:
UserID | Permission
‾‾‾‾‾‾‾|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
ID1 | ???
ID2 |
ID3 |
计划是计算Permission = Sum{2^(TypeID)}
。
因此,如果User1
需要获得Type1
,Type3
,Type4
的许可,我会存储2+8+16 = 26
。
所有内容都设置为以这种方式添加和删除权限。我可以使用Stored Procedure
来查看权限(每个权限都在自己的行中)。
有没有办法使用View
代替Stored Procedure
?
答案 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