好的,我已经建立了一个基本的成员资格系统,在我的数据库中有组(成员,管理员和主持人)。
这些组具有3个字段,ID,名称和权限。我的成员权限为空,管理员为{“ admin”:1
“主持人”:1},主持人有{“主持人”:1}。

我在文件夹user.phpclasses文件中有一个简单的功能

功能

 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.

10-07 19:25
查看更多