我正在尝试稍微优化我的 mysql 表,以获得一个更易于管理的表。我想将用户权限存储在一个位字段中。
例如,用户权限可以是 0110(我的用户权限数量越来越多,因此长度可能会长一点)
该示例可能对应于以下内容:
0:用户不能在网站上发布新闻
1:用户可以在网站上发布新文章
1:用户可以编辑网站上的任何文章
0:用户无法从网站上删除文章
等等(对于其他权限)
如果我将其存储在 mysql 位字段中。我如何在 PHP 中操作它?
例如,在 PHP 中是否有一种简单的方法来获取第三位并查看它是 0 还是 1?
有没有简单的方法将第三位设置为 0 或 1?
您是否考虑过将您的权限存储为整数,每个权限都是一个二进制值(即1、2、4、8、16),然后将它们的所有权限加在一起。然后您可以使用 & 运算符检查他们是否具有给定的权限
Like so:
if ($accessLevel & $userPermissions)
这为您提供了一个比存储二进制数更可用的系统
根据评论中的要求,提供更多信息。
您可以将用户表设置为具有整数字段来存储您的权限。您的每个权限级别都有一个与二进制位的值相对应的二进制倍数(不知道这里的正确术语)。例如:
Read - 1
Edit - 2
Create - 4
Delete - 8
等等,需要多少就多少。为了创建用户权限级别,您需要将这些值“或”在一起。假设上述级别作为静态值存储在类中,您可以像这样创建它:
$newUser->Permissions = Permissions::Read | Permissions::Create;
这为您提供了一个可以读取和创建但不能编辑或删除的用户。
要检查用户是否有权执行某项操作,请使用 AND:
if ($newUser->Permissions & Permissions::Read) {
echo 'You can do this!';
} else {
echo 'You can't this!';
}
这为您提供了一个简单的数据库字段,它可以根据您的实际需要进行扩展,并且易于使用检查和更改。您可能还需要考虑将权限级别存储在另一个表等中,具体取决于您可能需要的自定义级别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)