【问题标题】:not redirecting correct if user has permission如果用户有权限,则重定向不正确
【发布时间】:2014-10-12 12:20:58
【问题描述】:

在我的用户组中,我设置了可以选中或取消选中每个控制器名称的位置,然后单击提交并将名称发送到数据库。文本/数组格式。如果尝试访问未选中的控制器,我本来可以访问的那些控制器应该重定向'admin/error_permission'

每个用户在用户 ID 旁边还有用户组 ID。

我怎样才能从数据库中获取我的控制器的名称,然后让它们像这样重定向到我的错误页面

表名: user_group:列:user_group_id、名称、权限

存储控制器名称的列的名称是权限 和控制器名称的存储方式如下 permission a:2:{s:6:"access";a:1:{i:0;s:11:"column_left";}s:6:"modify";a:1:{i:0;s:11:"column_left";}}

我如何从数据库中获取控制器名称,而不是在数组中写入每个控制器名称。

function __construct()
{
    parent::__construct();
    if ( ! $this->session->userdata('logged_in'))
    { 
        // Allow some methods names from the database permission?
        $allowed = array(

        );
        if ( ! in_array($this->router->fetch_method(), $allowed)
        {
            // Not Allowed Access
            redirect('admin/error_permission');
        }
    }
}

【问题讨论】:

  • 这看起来像 PHP serialized arrays and objects。如果 Codeigniter 存储了这些,它希望有一个简单的方法来单独调用它们。通过查询准确地从 MySQL 中获取详细信息将非常困难。它确实需要由 PHP 完全检索,然后 unserialized()'d 和 Codeigniter 必须有记录的方式。
  • 天啊。如果没有反序列化,您无法从权限中获取单个键或值 = 数据库无法帮助您,您必须查询和反序列化,查找名称。这很奇怪。从数据库设计的角度来看,以序列化形式保存数据效率非常低(除非它是一个喜欢 json 的 no-sql 数据库。)。数据应该存储在反映其内部结构的单独表中。这将允许简单的查询。
  • 你有没有反序列化的例子可以得到我想要的东西
  • 是的,我已将其添加为答案

标签: php codeigniter


【解决方案1】:
$permissions = 'a:2:{s:6:"access";a:1:{i:0;s:11:"column_left";}s:6:"modify";a:1:{i:0;s:11:"column_left";}}';
$permissions_array = unserialize($permissions);

var_dump($permissions_array);

输出:

array(2) {
  'access' =>
  array(1) {
    [0] =>
    string(11) "column_left"
  }
  'modify' =>
  array(1) {
    [0] =>
    string(11) "column_left"
  }
}

if (false === array_key_exists($this->router->fetch_method(), $permissions_array))
{
            // Not Allowed Access
            redirect('admin/error_permission');
}

【讨论】:

  • 好的,应该使用什么模型查询?
  • 伪 SQL:SELECT permission FROM user_group WHERE user_group_id = $user[user_group_id] AND name = $controllerName; 。如果您有时间,请尝试摆脱序列化的权限字段。进行数据库规范化。这允许更有效的查询。
猜你喜欢
  • 2018-05-10
  • 2019-06-17
  • 2014-01-13
  • 1970-01-01
  • 2016-06-12
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多