PHP:用数学管理角色?

标签 php roles

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

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

最佳答案

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

相关文章:

facebook - 将管理员添加到应用程序时,我收到错误消息 NAME is not a verified user - 即使该用户是

asp.net-mvc - MVC中的授权属性顺序、优先级和功能问题

php - 使用 Mikehaertl 的 WkHtmlToPdf 创建横向 PDF

php - 在检查 CodeIgniter 中的 post 值之前检查是否设置了参数

java - 定义具有隐式权限/角色的安全模型

uml - UML 角色左侧的加号是什么意思?

azure - 如何故意使 Azure 角色崩溃?

php - 检查 Variable 是否存在并且 === true

php - 允许数字和字符之间连字符但删除字符之间连字符的正则表达式

php - 传递无效参数类型时显示异常消息