我已经开始在 MVC 框架上用 PHP 开发论坛应用程序,并且已经到了向成员分配权限的阶段(例如:读取、写入、更新、删除)。
现在,我知道我可以在数据库的用户表下添加 5 列并将它们设置为 1 | 0,但如果我想添加其他规则(例如 MOVE),这对我来说似乎太多了。
我如何动态地将这些权限单独分配给用户?
我听说过使用位掩码,但如果我在继续之前能够完全理解它们,那就太好了。
你有一个我如何实现这个的例子吗?
当权限位掩码表示为二进制时,最好理解,每个数字代表权限的打开或关闭。因此,如果权限 X、Y 和 Z 存在,并且我只能访问 X 和 Z,101
表示我拥有授予我的第一个和第三个权限,但没有第二个。二进制数101
相当于十进制数5
,这就是最终存储在数据库中的内容。单个小整数是比字符串或几个小整数更有效的存储对象。
EDIT:我意识到利用现有的转换函数来快速实现是多么容易。这是一个示例。
<?php
function bitmask_expand($n) {
// 9 returns array(1, 0, 0, 1)
return str_split(base_convert($n, 10, 2));
}
function bitmask_compact($a) {
// array(1, 0, 0, 1) returns 9
return (int) base_convert(implode($a), 2, 10);
}
$ns = range(0, 7);
foreach($ns as $n) {
print_r($b = bitmask_expand($n));
echo bitmask_compact($b), "\n\n";
}
如果使用循环,而不是在字符串之间拉回或拉出,您可能会获得更好的性能,但这非常清楚地说明了原理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)