即时通讯尝试学习在我的应用程序中使用按位权限。 问题是,它不工作:(按位权限不工作PHP
当用户登录时,我保存在会话的用户对象,它看起来是这样的:
[user] => User Object
(
[id] => 1
[firstname] => Firstname
[lastname] => Lastname
[emailaddress] => [email protected]
[permissions] => 16
)
我有一个名为身份验证类,我在其中定义一些contants,这是这些:
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许可,它不是一个管理员,它应该说没有联系..但它并不总是说是的管理员..
可能用户有人告诉我我在这里做错了什么?
谢谢!
那些......不是按位。那些是十进制的。 (十分明智?)此外,我不认为你没有检查按位权限 - 它应该是'perm&required_perm === required_perm'。 (尽管可能不是。)PHP 5.4+支持'0b0101'形式的二进制文字符号。 – 2013-02-27 19:22:42
根据http://stackoverflow.com/questions/132194/php-storing-objects-inside-the-session在'$ _SESSION'中存储对象通常不是一个好主意。 – Mike 2013-02-27 19:39:59