Php 按位权限不起作用

Php 按位权限不起作用,php,bit-manipulation,Php,Bit Manipulation,我正在尝试学习在我的应用程序中使用的按位权限。 问题是,它不起作用: 当用户登录时,我在会话中保存一个用户对象,如下所示: [user] => User Object ( [id] => 1 [firstname] => Firstname [lastname] => Lastname [emailaddress] => email@adres [permissions]

我正在尝试学习在我的应用程序中使用的按位权限。 问题是,它不起作用:

当用户登录时,我在会话中保存一个用户对象,如下所示:

    [user] => User Object
    (
        [id] => 1
        [firstname] => Firstname
        [lastname] => Lastname
        [emailaddress] => email@adres
        [permissions] => 16
    )
我有一个名为authenticate的类,我在其中定义了一些contant,它们是:

class authenticate {   

const GUEST = 1;  // 1
const USER = 10;  // 2
const MODERATOR = 1000; // 8
const ADMIN = 10000; // 16
现在,当用户登录管理员时,我希望确保该用户具有管理员权限,我尝试通过以下方式进行检查:

  if ($_SESSION['user']->permissions & authenticate::ADMIN){
             echo 'yep admin';
  }else {
             echo 'no admin';
  }
当我有一个用户,让我们说有一个数字8作为权限,它不是一个管理员,它应该说没有管理员。。但它不总是说是的,管理员

谁能告诉我我做错了什么

谢谢

应该是这样的

const GUEST = 1;     // 1
const USER = 2;      // 10
const MODERATOR = 8; // 1000
const ADMIN = 16;    // 10000
应该是的

const GUEST = 1;     // 1
const USER = 2;      // 10
const MODERATOR = 8; // 1000
const ADMIN = 16;    // 10000
问题是,1000是数字1000。您需要二进制表示为1000的数字,即数字8

您可以使用1、2、4、8、16等,就像Mikhail所做的那样

然而,如果您想可视化按位计算发生了什么,如果您可以直观地看到位的位置,那就太好了。PHP5.4引入了二进制整数语法

const GUEST     = 0b00001;  // 1
const USER      = 0b00010;  // 2
const MODERATOR = 0b01000;  // 8
const ADMIN     = 0b10000;  // 16
问题是,1000是数字1000。您需要二进制表示为1000的数字,即数字8

您可以使用1、2、4、8、16等,就像Mikhail所做的那样

然而,如果您想可视化按位计算发生了什么,如果您可以直观地看到位的位置,那就太好了。PHP5.4引入了二进制整数语法

const GUEST     = 0b00001;  // 1
const USER      = 0b00010;  // 2
const MODERATOR = 0b01000;  // 8
const ADMIN     = 0b10000;  // 16

那些它们不是按位的。这些是十进制的。十明智?此外,我不认为您没有正确检查位权限-它应该是perm&required\u perm===required\u perm。虽然也许不是。PHP5.4+支持0b0101形式的二进制文字表示法。根据PHP5.4+的说法,在$\会话中存储对象通常不是一个好主意。那些。。。它们不是按位的。这些是十进制的。十明智?此外,我不认为您没有正确检查位权限-它应该是perm&required\u perm===required\u perm。虽然也许不是。PHP5.4+支持0b0101形式的二进制文字表示法。据我所知,在$会话中存储对象通常不是一个好主意。当用户是管理员时,我必须向数据库中的权限字段添加10000?@user1362916你知道什么是二进制数吗?当用户是管理员时,我必须向数据库中的权限字段添加10000数据库?@user1362916你知道什么是二进制数吗?