权限组无法正常工作

时间:2014-01-16 13:53:56

标签: php mysql permissions membership

好的,我已经建立了一个基本的会员系统,我的数据库中有组(成员,管理员和主持人)。 这些组有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上什么都没有?

分组表 enter image description here

用户表 enter image description here

好的,出于某种原因你需要登录或注册! echo显示管理员登录时无法识别。

所有我想要做的是允许不同的群体不同的页面accsess

1 个答案:

答案 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.