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你知道什么是二进制数吗?