好的,我已经建立了一个基本的成员资格系统,在我的数据库中有组(成员,管理员和主持人)。
这些组具有3个字段,ID,名称和权限。我的成员权限为空,管理员为{“ admin”:1
“主持人”:1},主持人有{“主持人”:1}。
我在文件夹user.php
的classes
文件中有一个简单的功能
功能
class User {
public function hasPermission($key) {
$group = $this->_db->query("SELECT * FROM groups WHERE id = ?", array($this->data()->group));
if($group->count()) {
$permissions = json_decode($group->first()->permissions, true);
if($permissions[$key] === 1) {
return true;
}
}
return false;
}
}
然后在文件
admin.php
中,我有一段简单的代码,如果登录的用户是admin,则应显示回显ps:我需要的
init.php
文件具有我的classes/User.php
文件,因此我不需要调用多个文件。码
<?php
}
if($user->hasPermission('admin')) {
echo '<p>You are a admin!</p>';
} else {
echo 'You need to <a href="login.php">log in</a> or <a href="register.php">register</a>!';
}
?>
由此可见,当管理员登录后,应显示一个回显,不幸的是,我只是得到一个空白页。
题
所以我的问题是,有人知道为什么这是行不通的,因为我有一个管理员权限集用户登录并且在
admin.php
上什么也没有得到?组表
用户表
好的,出于某种原因,您需要登录或注册! echo显示管理员登录时无法识别。
我试图做的是允许不同的组不同的页面访问
最佳答案
好吧,由于我之前的答案已被删除,这是另一回事。
您的问题是您在此处进行的类型安全比较:
if($permissions[$key] === true) {
return true;
}
您的数组是由json对象
{"moderator": 1}
填充的,该对象在php中转换为array('moderator' => 1)
。您正在使用类型安全比较将布尔值true
与整数1
进行比较。这将失败,因为类型不匹配。有关更多详细信息,请参见http://php.net/manual/en/language.operators.comparison.php。您可以通过使用类型不安全的比较或将
$permissions
转换为布尔值来对此进行补救。if ((bool)$permissions[$key] === true) // Both are now of type boolean and will be compared.
要么
if ($permissions[$key] == true) // Will compare 1 and TRUE, which will result in TRUE.