我曾经看过一篇关于如何使用特定类型的编号系统来管理角色的文章.将为用户分配特定的角色编号,并且根据计算,该编号可以代表多个角色.
任何人都可以与我分享这项技术或分享链接吗?谢谢!
Pal*_*tir 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
如果您有位掩码,并且想要知道用户是否具有某个角色,则使用此操作:
(bitmask&role_value)> = 1
例如:
(11和8)> = 1?是的,所以用户有admin角色
(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
希望它有帮助:)