我试图学习在我的应用程序中使用按位权限。问题是,它不工作:(
当用户登录时,我在会话中保存一个user对象,如下所示:
[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
现在,当用户以admin登录时,我想确保用户具有管理员权限,我尝试这样检查:
if ($_SESSION['user']->permissions & authenticate::ADMIN){
echo 'yep admin';
}else {
echo 'no admin';
}
当我有一个用户,假设有一个数字8作为权限,它不是一个admin,它应该说no admin..但是它没有它总是说是的admin ..
谁能告诉我我在这里做错了什么?谢谢!
应该是
const GUEST = 1; // 1
const USER = 2; // 10
const MODERATOR = 8; // 1000
const ADMIN = 16; // 10000
问题是,如Mikhail所示,1000
是数字1000。您需要二进制表示为1000
的数字,即数字8。
您可以使用1
, 2
, 4
, 8
, 16
等,如Mikhail所做的。
然而,如果你想直观地看到按位计算发生了什么,如果你能直观地看到位在哪里,那就太好了。PHP 5.4引入了二进制整数语法。
const GUEST = 0b00001; // 1
const USER = 0b00010; // 2
const MODERATOR = 0b01000; // 8
const ADMIN = 0b10000; // 16