1

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

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

    [user] => User Object
    (
        [id] => 1
        [firstname] => Firstname
        [lastname] => Lastname
        [emailaddress] => email@adres
        [permissions] => 16
    )

我有一个名为 authenticate 的类,我在其中定义了一些内容,它们是:

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 作为权限时,它不是管理员,它应该说没有管理员.. 但它并不总是说是管理员..

谁能告诉我我在这里做错了什么?

谢谢!

4

2 回答 2

5

应该是

const GUEST = 1;     // 1
const USER = 2;      // 10
const MODERATOR = 8; // 1000
const ADMIN = 16;    // 10000
于 2013-02-27T19:23:25.897 回答
5

正如米哈伊尔所展示的,问题在于这1000是一千。您需要二进制表示为1000的数字,即数字八。

您可以像 Mikhail 一样使用1, 2, 4, 8,16等。

但是,如果您想可视化按位计算发生的情况,那么如果您可以直观地看到位的位置,那就太好了。PHP 5.4 引入了二进制整数语法。

const GUEST     = 0b00001;  // 1
const USER      = 0b00010;  // 2
const MODERATOR = 0b01000;  // 8
const ADMIN     = 0b10000;  // 16
于 2013-02-27T19:30:08.630 回答