以二进制设置权限

Dav*_*ger 4 php

我在学校看到了一个使用二进制字符串设置权限的系统.

假设101001 = 41

所以:

  • 1可以是第1页的权限
  • 2可以是第2页的许可
  • 4可以是第3页的许可
  • 8可以是第4页的许可
  • 16可以是第5页的许可
  • 32可以是第6页的许可

所以我想说我得到了上面的二进制字符串(101001).我可以访问第1,4和6页.

我怎么能用PHP做到这一点?假设我在MySQL中有一个名为permsdec 的字段,因此101001将为41. 我怎么知道41在PHP中等于1,8和32?

谢谢.

Mik*_*e B 11

听起来你在谈论位和位运算符.设置此方法的最简单方法是为每个权限定义常量

const POST   = 1;
const DELETE = 2;
const UPDATE = 4;
const READ   = 8;
Run Code Online (Sandbox Code Playgroud)

一旦定义了这些,就可以很容易地使用按位运算符进行比较:

$userValue = '1101';

if ($userValue & self::POST) {
  echo 'Can Post';
}

if ($userValue & self::DELETE) {
  echo 'Can Delete';
}

if ($userValue & self::UPDATE) {
  echo 'Can Update';
}

if ($userValue & self::READ) {
  echo 'Can Read';
}
Run Code Online (Sandbox Code Playgroud)

这是PHP自身常量的工作原理.如果您曾使用类似于E_ALL & E_DEPRECATED实际使用二进制数的方式设置错误报告.