我曾看过一篇关于如何使用特定编号系统来管理角色的文章。用户将被分配一个特定的角色号码,根据计算,该数字可以代表多个角色。
是否有人可以与我分享这种技术或链接?谢谢!
这是一个位掩码。其工作原理如下:为每个角色分配一个递增的数字,当你想要将一个角色分配给一个用户时,你选择该角色的数字。如果你想添加另一个角色,只需将该角色数字添加到原始数字中即可。你可以添加任意多个角色。关键在于如何选择这些数字:它们是2的幂。
以下是一个例子:
角色:编辑。 值:2^0 = 1 角色:经理。 值:2^1 = 2 角色:主管。 值:2^2 = 4 角色:管理员。 值:2^3 = 8 ...
要给用户指定编辑者角色,您需要将1保存到数据库中; 要给用户指定编辑者、经理和管理员角色,您需要保存1 + 2 + 8 = 11
如果你将这些看作由1或0值组成的数组,你就会明白为什么这能够工作了。
|__|__|__|__|__|__| 16 8 4 2 1
每个角色都是相应槽位上的1。所以我们的11个案例是:
|__|__|_1|_0|_1|_1| 16 8 4 2 1
如果你有一个位掩码,并且想知道用户是否具有某个角色,可以使用以下操作:
(位掩码 & 角色值) >= 1
例如:
(11 & 8) >= 1?是的,所以用户具有管理员角色
(11 & 4) >= 1?不是,所以用户没有主管角色
它被称为位掩码,因为你所做的是“检查特定位置是否有1”,也就是“应用掩码来屏蔽(设置为0)除了正在搜索的位置之外的所有位置”:
11 --> |__|__|_1|_0|_1|_1| 16 8 4 2 1 8 --> |__|__|_1|_0|_0|_0| (掩码) 16 8 4 2 1 AND -> |__|__|_1|_0|_0|_0| 结果: 是的
我想你应该听说过“位标志”(bit-flags)这个概念。我不知道有没有好的英文教程(我是德国人),但我认为谷歌会给你提供一些不错的链接。