PHP:用数学管理角色?

11

我曾看过一篇关于如何使用特定编号系统来管理角色的文章。用户将被分配一个特定的角色号码,根据计算,该数字可以代表多个角色。

是否有人可以与我分享这种技术或链接?谢谢!


我不了解 PHP,但在 Unix 中,他们使用它,你想要在 Unix 系统中得到答案吗? - vodkhang
2个回答

20

这是一个位掩码。其工作原理如下:为每个角色分配一个递增的数字,当你想要将一个角色分配给一个用户时,你选择该角色的数字。如果你想添加另一个角色,只需将该角色数字添加到原始数字中即可。你可以添加任意多个角色。关键在于如何选择这些数字:它们是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|  结果: 是的

谢谢!这正是我在寻找的。用这种方式管理用户非常容易!! - Mike Moore

3

我想你应该听说过“位标志”(bit-flags)这个概念。我不知道有没有好的英文教程(我是德国人),但我认为谷歌会给你提供一些不错的链接。


我想这回答了OP所寻找的内容。 - Salman A
谢谢你的帮助。显然,我正在询问“位掩码”,正如@Palantir所描述的那样。 - Mike Moore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接