【问题标题】:permission groups not working correctly权限组无法正常工作
【发布时间】:2014-01-16 13:53:56
【问题描述】:

好的,我已经建立了一个基本的会员系统,我的数据库中有组(成员、管理员和版主)。 这些组有 3 个字段,ID、名称和权限。成员我将权限留空,管理员有 {"admin": 1 "moderator": 1} 和 moderator 有 {"moderator": 1}。

我在文件夹classes 中的user.php 文件中有一个简单的函数

功能

 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 文件中,我有一段简单的代码,如果登录的用户是管理员,则应该显示回显

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 显示它无法识别管理员何时登录。

我要做的就是允许不同的组访问不同的页面

【问题讨论】:

  • 我们需要查看正在构建的代码$user
  • 我在else 之前看到了一个不需要的}
  • 好的,我将修改额外的 } 并将 $user 代码添加到答案中。

标签: php mysql permissions membership


【解决方案1】:

好吧,因为我之前的答案被删除了..这是另一个尝试。

您的问题是您在此处进行的类型安全比较:

if($permissions[$key] === true) {
    return true;
}

您的数组由 json 对象 {"moderator": 1} 填充,在 php 中转换为 array('moderator' =&gt; 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.

【讨论】:

  • 您能否提供更多有关这些变量内容的信息?做一些$permissions的var_dumps,这样你就可以看到你实际比较的东西。当您使用它时,还要确保您通过了 if($group-&gt;count()) { 部分。
  • 帮我一个忙并更新 if($group->count()){ 部分:if($group-&gt;count()) { $permissions = $group-&gt;first()-&gt;permissions; var_dump($permissions); $permissions = json_decode($group-&gt;first()-&gt;permissions, true); var_dump($permissions); var_dump($permissions[$key]); if($permissions[$key] === 1) { return true; } } else { echo "No group results!"; } 现在执行它并发布输出。
  • 感谢您的帮助。最后是一个小的拼写错误......我的错,谢谢你的帮助。
猜你喜欢
  • 2020-06-24
  • 2023-03-29
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 2019-06-21
  • 1970-01-01
相关资源
最近更新 更多