use*_*916 1 php bit-manipulation
我试图学习在我的应用程序中使用按位权限.问题是,它不起作用:(
当用户登录时,我在会话中保存用户对象,如下所示:
[user] => User Object
(
[id] => 1
[firstname] => Firstname
[lastname] => Lastname
[emailaddress] => email@adres
[permissions] => 16
)
Run Code Online (Sandbox Code Playgroud)
我有一个名为authenticate的类,其中我定义了一些含义,这些是:
class authenticate {
const GUEST = 1; // 1
const USER = 10; // 2
const MODERATOR = 1000; // 8
const ADMIN = 10000; // 16
Run Code Online (Sandbox Code Playgroud)
现在,当用户登录管理员时,我想确保用户具有管理员权限,我尝试以这种方式检查:
if ($_SESSION['user']->permissions & authenticate::ADMIN){
echo 'yep admin';
}else {
echo 'no admin';
}
Run Code Online (Sandbox Code Playgroud)
当我有一个用户,可以说让8号作为权限,它不是管理员,它应该说没有管理员..但它不是它总是说是的管理员..
谁能告诉我我在这里做错了什么?
谢谢!
它可能应该是
const GUEST = 1; // 1
const USER = 2; // 10
const MODERATOR = 8; // 1000
const ADMIN = 16; // 10000
Run Code Online (Sandbox Code Playgroud)
正如米哈伊尔所说,这个问题1000
就是千分之一.您需要二进制表示1000
的数字,即数字8.
您可以使用1
,2
,4
,8
,16
,等,米哈伊尔一样.
但是,如果您想通过按位计算可视化正在发生的事情,那么如果您可以直观地看到这些位的位置,那就太棒了.PHP 5.4引入了二进制整数语法.
const GUEST = 0b00001; // 1
const USER = 0b00010; // 2
const MODERATOR = 0b01000; // 8
const ADMIN = 0b10000; // 16
Run Code Online (Sandbox Code Playgroud)