PHP:用数学管理角色?

时间:2010-05-11 06:02:46

标签: php roles

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

有人可以与我分享此技术或分享链接吗?谢谢!

2 个答案:

答案 0 :(得分:20)

这是一个位掩码。它的工作方式如下:您为每个角色分配一个渐进式数字,然后当您想要为用户分配一个角色时,您可以选择该角色的编号。如果要添加其他角色,只需将该角色编号添加到原始角色即可。您可以根据需要添加任意数量的角色。诀窍在于你如何选择你的数字:它们是2的力量。

以下是一个例子:

Role: Editor.     Value: 2^0 = 1
Role: Manager.    Value: 2^1 = 2
Role: Supervisor. Value: 2^2 = 4
Role: Admin.      Value: 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 

如果您有位掩码,并且想知道用户是否具有某个角色,请使用此操作:

(位掩码& role_value)> = 1

例如:

(11& 8)> = 1?是的,因此用户具有管理员角色
(11& 4)> = 1?不,所以用户没有主管角色

它被称为位掩码,因为你正在做的是“检查特定位置是否有1”,即“应用一个掩码(设置为0)所有位置,除了你正在寻找的一个):

11 --> |__|__|_1|_0|_1|_1|
           16  8  4  2  1 
 8 --> |__|__|_1|_0|_0|_0|  (mask)
           16  8  4  2  1 
AND -> |__|__|_1|_0|_0|_0|  Result: Yes

希望它有所帮助:)

答案 1 :(得分:3)

我想你听说过“比特旗”。我不知道一个好的英语版本(我是德国人) - 但我认为谷歌会给你一些不错的链接。