繁体   English   中英

PHP:用数学管理角色?

[英]PHP: Manage roles with math?

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

任何人都可以与我分享这项技术或分享链接吗? 谢谢!

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

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

(bitmask&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

希望它有帮助:)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM