gpt4 book ai didi

php - 在 PHP 中实现位掩码或关系 ACL

转载 作者:搜寻专家 更新时间:2023-10-31 22:12:07 25 4
gpt4 key购买 nike

我认为 PHP 用户熟悉 E_ALLerror_reporting() 函数中的各种其他位掩码常量。它们是数字常量,例如:E_ALL 表示32676E_NOTICE 表示8。我可以说我想要显示所有错误但通知,我通过传递 E_ALL & ~E_NOTICE 作为 error_reporting() 的参数来做到这一点。但本质上,我告诉它 3275932767 - 8

这些位掩码从 f(x) = 2^x 函数的输出集中获取它们的值,并对这些值进行加减运算,我们可以微调要得到的错误。

我正在考虑在我的框架中实现一个更可配置的访问控制。为此,我希望设置用户的位掩码将具有将数字值加在一起的相同方法,问题是我不知道如何实现它,如何检查请求的值和当前值:用户是否有权访问 foobar?

另一个问题是可扩展性。我可能只有 31 个唯一位(因为 2^32 达到太大且无法维护的状态),如果我需要经历(现在还没有真正计划)这个障碍,那么迁移会很困难吗?我对访问控制的另一个想法是建立一个表,将 user.id 和他拥有的访问位的整数值链接在一起。

总而言之,以下两个选项中哪个是更好的解决方案?:

  • 使用用户表中的一个字段来存储位掩码,然后在需要时从中获取请求的位。
  • 在一个表中定义了一组访问标志,并有一个将用户链接到访问权限的关系表,利用关系数据库的强大功能来满足我们的需求。

我正在研究第二种方法,但我不知道哪种方法最好。

最佳答案

您永远不应该在数据库中使用一个大整数来表示多个不同的值。每个字段一个值,这是数据建模(或其他)的第一定律。

换句话说,你应该有第二个表 say;用户 ID 字段和访问位。

用户权限:

  • userID, int, primary
  • 权限,内部

关于php - 在 PHP 中实现位掩码或关系 ACL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11799789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com