好的,我已经建立了一个基本的会员系统,我的数据库中有组(成员,管理员和主持人)。 这些组有3个字段,id,name和permission。我保留空白的成员,管理员有{“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显示管理员登录时无法识别。
所有我想要做的是允许不同的群体不同的页面accsess
答案 0 :(得分:3)
好吧,因为我之前的回答被删除了..这是另一回事。
您的问题是您在此处进行的类型安全比较:
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.