我曾经看到一篇文章是关于如何使用特定类型的编号系统来管理角色的。将为用户分配一个特定的角色编号,根据计算,该编号可以代表多个角色。
有人可以与我分享此技术或分享链接吗?谢谢!
最佳答案
这是一个位掩码。它是这样工作的:您为每个角色分配一个累进编号,然后当您要为用户分配一个角色时,您选择该角色的编号。如果要添加另一个角色,只需将该角色编号添加到原始角色即可。您可以根据需要添加任意数量的角色。诀窍在于您如何选择数字:它们是 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
如果你有一个位掩码,并且你想知道用户是否有某个角色,你可以使用这个操作:
(位掩码和角色值)>= 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
希望对您有所帮助:)
关于PHP:用数学管理角色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808391/