PHP 中的位操作和 MySQL 检索

2024-02-12

我正在尝试稍微优化我的 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(使用前将#替换为@)

PHP 中的位操作和 MySQL 检索 的相关文章

随机推荐

  • Chisel3:对 Vector IO 的多位切片的部分分配

    可以对向量 IO 进行部分赋值 如下所示 import chisel3 class example 1 extends Module val io IO new Bundle val in1 Input Vec 4 Bool val out
  • 基于php的文档管理系统[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 谁能推荐一个简单的文档管理系统和一个不错的网络服务界面 我正在考虑使用它来提供从 ajax Web 应用程序上传的文件的元数据管理 我尝试
  • SVN 仅从存储库更新特定文件

    这个存储库有很多很多 GB 其中 99 是我不需要的 我想做的是仅获取 更新 js css html doc和 pdf 文件 其余的都是巨大的 我想留在那里 而不是浪费时间和磁盘空间 因为我不需要查看它们 而且我永远不会更改它们 我意识到
  • 将 pv 输出(stderr)打印到文件

    我怎样才能打印stderr questions tagged stderr的输出pv questions tagged pv到一个文件 例如 timeout 5s dd if dev random pv r gt dev null 505k
  • UIButton 图像位置取决于 titleLabel 的框架

    我的问题很简单 但我找不到解决方案 我有一个带有标题和图像的 UIButton 我希望无论发生什么情况图像位置都是固定的 所以我这样设置 button setImageEdgeInsets UIEdgeInsetsMake 0 f 0 f
  • Selenium - 如何计算表中的行数?

    我有一个包含 n 行的表 我需要计算它们 该怎么做 示例 我的表格如下所示 Type Balance Date received Date returned Payment method Amount General Default 10
  • 从文件夹 ES6 导入

    我正在学习JS 我有这样的东西 all inside folder reducers reducer1 js export default reducer1 reducer2 js export default reducer2 index
  • 在 React 和 Redux 中处理本地状态

    是否可以将本地状态存储在state与 redux 一起使用 React 时的对象 通过操作将所有内容存储在状态树中很快就会变得乏味 感觉某些状态仅与应用程序的呈现 显示相关 而不与逻辑相关 我所说的演示是指动画 闪烁 面板的展开 收缩状态
  • NetBeans 12.0:“类没有 main 方法”(但有)

    NetBeans 12 0 Jdk 15 我无法启动我的程序 单击绿色运行按钮不会执行任何操作 并且在 MainFrame 上右键单击 运行文件会出现错误 类没有主方法 但正如您在下面的 GIF 中看到的 它确实有一个 main Strin
  • Android 中如何将一个值从一个 Activity 传递到另一个 Activity? [复制]

    这个问题在这里已经有答案了 我创建了一个带有 AutuCompleteTextView ACTV 和按钮的活动 我在 ACTV 中输入一些文本 然后按下按钮 按下按钮后 我希望该活动转到另一个活动 在第二个活动中 我只想将在第一个活动的 A
  • 无限大小的整数?

    在Python中 我可以编写一个程序来计算无限大小的整数 就在前几天 我做了百万分之一斐波那契数 它太大了 无法放入控制台 如果可以在 Python 中做到这一点 据我了解 Python 是用 C 编写的 那么如何在 C 中做到同样的事情呢
  • 我们如何跟踪 Javascript 错误?现有的工具真的有用吗?

    今天我发现需要跟踪和检索 Javascript 错误堆栈跟踪来解决这些问题 今天 我们能够捕获所有其余调用 其想法是 一旦出现错误 就会自动发布该错误的堆栈跟踪以及其余保存的服务的响应 以便我们可以以几乎相同的方式检测 重现和解决问题环境
  • 使用 XHR 流时通过 SockJs 确定 STOMP 的用户

    客户端不支持WebSockets 因此SockJs使用XHR Streaming和defineUser 虽然在使用WebSockets时被调用 但根本不会被调用 还有其他方法来设置本金吗 这就是我所拥有的 class CustomHands
  • 从系列/列中查找第一个元素(例如“True”)的索引

    如何查找系列或列中元素的索引 例如 True 例如 我有一个列 我想在其中识别事件发生的第一个实例 所以我把它写成 Variable df Force lt event 然后 这将创建一系列布尔数据 其中为 False 直到第一个实例变为
  • RAML:嵌套模式

    1 编写 RAML 时 我可以在模式定义中使用嵌套吗 例如 schemas DNSResponse type object properties AnswerSection type array items I want a re usea
  • Rails ActiveRecord::多参数分配错误

    我的模型中有以下代码 attr accessor expiry date validates presence of expiry date on gt create message gt can t be blank 我认为以下几点 但是
  • WebClient.UploadString 方法的最大数据长度

    我的 asp net mvc 应用程序中有以下代码 string URI http send url com smsapi sender php string queryParameters a long query string stri
  • scipy curve_fit多系列数据

    我试图建立一个曲线拟合 考虑基于相同 x 值和相同 指数 定律的多个 y 系列 该系列中的 y 值略有不同 因为它们是实验性的 但仍然很接近 x 相同 我尝试构建两个数组 一个包含 x 另一个包含两个不同系列的 y def f x a b
  • ContentResolver.bulkInsert(..) 的意义是什么?

    My goal 我想批量 以事务方式 将多条记录插入到sqlite中 我的问题 我找到了方法android content ContentResolver 批量插入 http android git kernel org p platfor
  • PHP 中的位操作和 MySQL 检索

    我正在尝试稍微优化我的 mysql 表 以获得一个更易于管理的表 我想将用户权限存储在一个位字段中 例如 用户权限可以是 0110 我的用户权限数量越来越多 因此长度可能会长一点 该示例可能对应于以下内容 0 用户不能在网站上发布新闻 1